如何在iOS8和Swift中推送视图

如何在iOS8和Swift中推送视图,swift,uiview,uipickerview,Swift,Uiview,Uipickerview,我正在更新一个早于iOS5的应用程序,因此需要做很多更改。 在现有的应用程序中,我们将在nib中创建的视图推送到包含UIPickerView/UIDatePicker的屏幕上,以允许用户进行选择 我认为这应该是一件容易迁移到iOS8/Swift的事情,但我在过去的24小时里一直在试图找到最好的方法来实现这一点,包括故事板/Segue、容器视图、视图控制器、UIPopOverpresentationController等。几乎没有达成共识,甚至苹果的示例代码也将UIDatePicker推到了一个表

我正在更新一个早于iOS5的应用程序,因此需要做很多更改。 在现有的应用程序中,我们将在nib中创建的视图推送到包含UIPickerView/UIDatePicker的屏幕上,以允许用户进行选择

我认为这应该是一件容易迁移到iOS8/Swift的事情,但我在过去的24小时里一直在试图找到最好的方法来实现这一点,包括故事板/Segue、容器视图、视图控制器、UIPopOverpresentationController等。几乎没有达成共识,甚至苹果的示例代码也将UIDatePicker推到了一个表单元格中

这似乎是一个常见的要求,我希望能就其他人如何解决这一问题提供任何建议/意见

非常感谢

试试这个


self.performsguewithidentifiery您的序列标识符,发件人:self

感谢您的回答和寻求澄清的问题。 经过一个周末的调查,我意识到我已经陷入了一个旧的iOS模式

使用iOS8,一切都转移到了viewcontrollerpresentation,允许开发人员以不同的方向控制动画并定义一系列设备上的行为

对于我的问题,我相信答案如下:

使用UIPresentationController显示所需的UIViewController: 视图控制器是显示使用代码、nib或情节提要创建选择器视图的视图 演示控制器管理其演示方式,例如大小、演示样式 这也是处理透明/模糊视图以覆盖现有内容的地方 退房: func SIZEFORCHILDContentContainer容器:UIContentContainer,withParentContainerSize parentSize:CGSize->CGSize PresentedViewContainerView->CGRect的功能框架

UIPresentationController需要一个转换委托来管理符合UIViewControllerTransitionDelegate的表示 {

这反过来需要动画控制器UIViewControllerAnimatedTransitioning来处理动画幻灯片、溶解或更具冒险性的内容:

func transitionDurationtransitionContext:UIViewControllerContextTransitioning->NSTimeInterval{ 返回0.5 }

func animateTransitiontransitionContext:UIViewControllerContextTransitioning{

let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!
let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)!
let containerView = transitionContext.containerView()

let animationDuration = self .transitionDuration(transitionContext)
containerView.addSubview(toViewController.view)

UIView.animateWithDuration(animationDuration, animations: { () -> Void in
    <<< Animation Here>>>)
    }) { (finished: Bool) in
        transitionContext.completeTransition(true)
}
解雇的处理方式相同,只需拨打:

dismissViewControllerAnimatedtrue,完成:无

通过文档和优秀的WWDC视频可以获得更多信息,这让我明白了一切:

或者参见苹果的示例代码:

底线-不再像以前那样简单,假设一个设备在一个方向上,但对于更复杂的一点,视图和动画有更大的控制,能够扩展到多个设备

我希望这能帮助处于类似地位的人
谢谢

您能提供更多详细信息吗?您能提供更多详细信息吗?至少是您试图转换的obj-c代码。
let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)!
let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)!
let containerView = transitionContext.containerView()

let animationDuration = self .transitionDuration(transitionContext)
containerView.addSubview(toViewController.view)

UIView.animateWithDuration(animationDuration, animations: { () -> Void in
    <<< Animation Here>>>)
    }) { (finished: Bool) in
        transitionContext.completeTransition(true)
}
@IBAction func showOVC(sender: AnyObject) {
    let ovc = OverlayViewController()
    let overlayTransitioningDelegate = OverlayTransitioningDelegate()
    ovc.transitioningDelegate = overlayTransitioningDelegate
    self.presentViewController(ovc, animated: true, completion: nil)
}