创build自定义UIView并显示为在Swift中popup

我想创build一个自定义的UIView并使用Swift在我的主视图中popup显示它。

我的自定义UIView代码是

 class DatePopUpView: UIView { var uiView:UIView? override init() { super.init() self.uiView = NSBundle.mainBundle().loadNibNamed("DatePopUpView", owner: self, options: nil)[0] as? UIView } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } required override init(frame: CGRect) { super.init(frame: frame) } } 

我的主要观点是:

  @IBAction func date_button_pressed (sender : AnyObject?) { var popUpView = DatePopUpView() var centre : CGPoint = CGPoint(x: self.view.center.x, y: self.view.center.y) popUpView.center = centre popUpView.layer.cornerRadius = 10.0 let trans = CGAffineTransformScale(popUpView.transform, 0.01, 0.01) popUpView.transform = trans self.view .addSubview(popUpView) UIView .animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { popUpView.transform = CGAffineTransformScale(popUpView.transform, 100.0, 100.0) }, completion: { (value: Bool) in }) } 

但popup不来。 我使用断点,并注意到值被分配到我的popUpView,但它仍然不显示在我的主视图。 请帮忙

请注意:我使用StoryBoard为我的主视图和自定义视图我使用xib。

作为一个模态的阶段呈现视图

看看这个教程:

http://makeapppie.com/2014/08/30/the-swift-swift-tutorials-adding-modal-views-and-popovers/

您可以使用系统提供的segue转换或自定义的segue转换来获得真正的幻想效果。

这是制作自定义过渡animation师的一种方法:

 // // BaseTransitionAnimator.swift // import UIKit class BaseTransitionAnimator : NSObject, UIViewControllerAnimatedTransitioning { enum PresentationMode { case Presenting, Dismissing } var duration : NSTimeInterval = 1.0 var mode : PresentationMode = .Presenting init(duration: NSTimeInterval, mode: PresentationMode) { self.duration = duration self.mode = mode } func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval { return duration } func animateTransition(transitionContext: UIViewControllerContextTransitioning) { // stub - must be overriden by inheritor } 

 // // ExpandingTransitionAnimator.swift // import UIKit class ExpandingTransitionAnimator : BaseTransitionAnimator { enum ExpansionMode { case Basic, WithFadingImage } var image : UIImage? = nil override init(duration: NSTimeInterval, mode: PresentationMode) { super.init(duration: duration, mode: mode) } override func animateTransition(transitionContext: UIViewControllerContextTransitioning) { var fromVC = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)! var toVC = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)! var fromView = fromVC.view var toView = toVC.view var containerView = transitionContext.containerView() var duration = transitionDuration(transitionContext) var initialFrame = transitionContext.initialFrameForViewController(fromVC) var imageView : UIImageView? if image != nil { imageView = UIImageView(image: image!.crop(CGPointMake(0, 0), size: toView.frame.size)) } if (mode == .Presenting) { toView.transform = CGAffineTransformMakeScale(0.05, 0.05) var originalCenter = toView.center containerView.addSubview(toView) if imageView != nil { imageView!.transform = CGAffineTransformMakeScale(0.05, 0.05); containerView.addSubview(imageView!) } UIView.animateWithDuration(duration, delay:0.0, options:.CurveEaseInOut, animations: { if imageView != nil { imageView!.alpha = 0.0 imageView!.transform = CGAffineTransformMakeScale(1.0, 1.0) } toView.transform = CGAffineTransformMakeScale(1.0, 1.0) toView.center = originalCenter }, completion: { _ in transitionContext.completeTransition(!transitionContext.transitionWasCancelled()) }) } else { // dismissing UIView.animateWithDuration(duration, animations: { fromView.transform = CGAffineTransformMakeScale(0.05, 0.05) fromView.center = toView.center }, completion: { _ in fromView.removeFromSuperview() transitionContext.completeTransition(!transitionContext.transitionWasCancelled()) }) } } } 

尝试修改你的看法是这样的:

 class DatePopUpView: UIView { var uiView:UIView? override init() { super.init() self.setup() } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.setup() } override init(frame: CGRect) { super.init(frame: frame) self.setup() } setup() { self.uiView = NSBundle.mainBundle().loadNibNamed("DatePopUpView", owner: self, options: nil)[0] as? UIView self.uiView.frame = self.bounds self.uiView.autoresizingMask = .FlexibleWidth | .FlexibleHeight self.addSubview(self.uiView) } } 

在故事板

  • 在故事板中创build一个UIViewController
  • 将自定义类设置为anotherViewController和Storyboard_ID作为another_view_sid
  • 创build一个新的Cocoa Touch类作为另一个ViewController和UIVIewController的子类

在viewController中

  let popvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "another_view_sid") as! anotherViewController self.addChildViewController(popvc) popvc.view.frame = self.view.frame self.view.addSubview(popvc.view) popvc.didMove(toParentViewController: self) 

在另一个ViewController中

 override func viewDidLoad() { super.viewDidLoad() showAnimate() } } @IBAction func Close_popupView(_ sender: Any) { removeAnimate() } func showAnimate() { self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) self.view.alpha = 0.0 UIView.animate(withDuration: 0.25, animations: { self.view.alpha = 1.0 self.view.transform = CGAffineTransform(scaleX: 1.0, y: 1.0) }) } func removeAnimate() { UIView.animate(withDuration: 0.25, animations: { self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3) self.view.alpha = 0.0 }, completion: {(finished : Bool) in if(finished) { self.willMove(toParentViewController: nil) self.view.removeFromSuperview() self.removeFromParentViewController() } }) } 

在DatePopUpView看起来像加载的笔尖文件,但实际上并没有作为子视图添加到视图。