我正在更新iOS5之前的应用程序 - 因此需要更改。 在现有应用程序中,我们将视图(在笔尖中创建)推送到包含UIPickerView / UIDatePicker的屏幕上,以允许用户进行选择。
这对于迁移到iOS8 / Swift来说应该是一件容易的事情,但过去24小时我一直试图找出使用Storyboard / Segue,Container视图,viewControllers,UIPopoverPresentationControler等进行此操作的最佳方法,但几乎没有达成共识(甚至Apple的示例代码也将UIDatePicker推送到表格单元格中
这似乎是一个常见的要求,我很感激有关别人如何解决这个问题的任何意见/建议。
非常感谢
答案 0 :(得分:0)
试试这个
self.performSegueWithIdentifier("您的segue标识符",发件人:self)
答案 1 :(得分:0)
感谢您寻求澄清的答案和问题。 经过一个周末的调查后,我意识到我一直陷入了旧的iOS范式。
使用iOS8,所有内容都已移至ViewController演示文稿,允许开发人员控制动画并定义一系列设备(不同方向)的行为。
我的问题(我相信)的确切答案如下:
退房: func sizeForChildContentContainer(container:UIContentContainer,withParentContainerSize parentSize:CGSize) - > CGSize func frameOfPresentedViewInContainerView() - >的CGRect
{
// We need to create a presentation controller to manage the presentation of VC
func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController!, sourceViewController source: UIViewController) -> UIPresentationController? {
let opc = OverlayPresentationController(presentedViewController: presented, presentingViewController: source)
return opc
}
// Get hold of an animation controller for presentation
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
let animationController = OverlayAnimatedTransitioning()
return animationController
}
// Get hold of an animation controller for dismissal
func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
let animationController = OverlayAnimatedTransitioning()
return animationController
}
反过来需要一个动画控制器(UIViewControllerAnimatedTransitioning)来处理动画(幻灯片,溶解或更具冒险性的东西):
func transitionDuration(transitionContext:UIViewControllerContextTransitioning) - > NSTimeInterval { 返回0.5 }
func animateTransition(transitionContext: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)
}
使用构建块,然后可以调用所需的UIViewController(使用action / selector / segue),并通过设置所需视图的transitioningDelegate属性来调用所需的效果:
@IBAction func showOVC(sender: AnyObject) {
let ovc = OverlayViewController()
let overlayTransitioningDelegate = OverlayTransitioningDelegate()
ovc.transitioningDelegate = overlayTransitioningDelegate
self.presentViewController(ovc, animated: true, completion: nil)
}
只需拨打:
即可以同样的方式处理解雇dismissViewControllerAnimated(true,completion:nil)
可以通过文档和优秀的WWDC视频获取更多信息,这些视频让我一切都清楚:A look inside presentation controllers
或查看apple的示例代码:LookInside
底线 - 不像以前那么简单(假设单个设备在一个方向上),但是为了更复杂一点,可以更好地控制视图和动画,并能够扩展到多个设备。
我希望这有助于处于类似位置的人们 感谢