Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 创建自定义UIView并在Swift中显示为弹出窗口_Ios_Iphone_Swift_Uiview - Fatal编程技术网

Ios 创建自定义UIView并在Swift中显示为弹出窗口

Ios 创建自定义UIView并在Swift中显示为弹出窗口,ios,iphone,swift,uiview,Ios,Iphone,Swift,Uiview,我正在尝试创建一个自定义的ui视图,并使用Swift在我的主视图中将其显示为弹出窗口 我的自定义UIView代码是 class DatePopUpView: UIView { var uiView:UIView? override init() { super.init() self.uiView = NSBundle.mainBundle().loadNibNamed("DatePopUpView", owner: self, options: nil)[0] as? UI

我正在尝试创建一个自定义的
ui视图
,并使用Swift在我的主视图中将其显示为弹出窗口

我的自定义
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

    })

 }
但是弹出窗口不会出现。我使用了断点并注意到该值被分配给了我的popUpView,但它仍然没有显示在我的主视图上。请帮忙


请注意:我使用故事板作为我的主视图和自定义视图,我使用xib制作。

将视图作为模式片段呈现

查看本教程:

您可以使用系统提供的segue过渡或自定义segue过渡,以获得真正奇特的效果

以下是制作自定义过渡动画的一种方法:

//
//  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
    }


在DatePopUpView中,您似乎正在加载nib文件,但实际上并未将其作为子视图添加到视图中。

尝试将视图修改为以下内容:

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)
     }
}

故事板中的

  • 在情节提要中创建一个UIViewController
  • 将自定义类设置为另一个视图控制器,将情节提要ID设置为另一个视图sid
  • 创建一个新的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)
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()
        }
    })
}
在另一个视图控制器中

    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)
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()
        }
    })
}

米利·沙阿答案的Swift 5版本

let popvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "another_view_sid") as! anotherViewController

self.addChild(popvc)
popvc.view.frame = self.view.frame
self.view.addSubview(popvc.view)
popvc.didMove(toParent: self)

@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(toParent: nil)
            self.view.removeFromSuperview()
            self.removeFromParent()
        }
    })
}

这意味着我应该创建一个UIViewcontroller,而不是UIView,并使用suegue(该代码仅适用于iPad)以模式显示它。在这方面值得一提。我正在使用iPhoneLet us。你确定正在调用日期按钮按下()函数吗?让我们来。好的,现在我怀疑你的观点。你为什么不暂时创建一个单独的项目呢。在主vc中加载你的nib,看看你是否能看到并调整你的视图大小。如果它看起来不错,那么我们可以重新考虑这种情况。我尝试给出帧并添加
var popUpView=DatePopUpView()popUpView.frame=CGRectMake(40,40,200,200)self.view.addSubview(popUpView)
,但没有成功这是动画代码的杰作。但是,如何显示为类似alertview的弹出窗口?