自定义ViewController转换,如UIPageViewController

时间:2015-10-07 21:57:30

标签: ios animation transition uipageviewcontroller

如果您选择滚动样式,我想使用PageViewController中的动画导航Tru ViewControllers。所以我想用左/右滑动来导航它们。 没有UIPageViewController怎么做。 有没有办法开发可重用的类,可以在我的应用程序中用作主要的过渡风格?

我感谢任何帮助

2 个答案:

答案 0 :(得分:1)

如果你想要与UIPageViewController相同的效果,你应该使用它。这就是它的用途。如果您有充分的理由不使用它,那么您可以谷歌中的任何一个教程来实现容器视图控制器。

答案 1 :(得分:0)

好吧,我设法使用Custom Storyboard Segues来做 这是代码:

自定义segue:

import UIKit
class CustomScrollPagingSegue: UIStoryboardSegue {
override func perform() {
    let firstVCView = self.sourceViewController.view as UIView!
    let secondVCView = self.destinationViewController.view as UIView!
    let screenWidth = UIScreen.mainScreen().bounds.size.width
    let screenHeight = UIScreen.mainScreen().bounds.size.height
    secondVCView.frame = CGRectMake(screenWidth, 0.0, screenWidth, screenHeight)
    let window = UIApplication.sharedApplication().keyWindow
    window?.insertSubview(secondVCView, aboveSubview: firstVCView)
    UIView.animateWithDuration(0.5, animations: { () -> Void in
        firstVCView.frame = CGRectOffset(firstVCView.frame, -screenWidth, 0.0)
        secondVCView.frame = CGRectOffset(secondVCView.frame, -screenWidth, 0.0)
        }) { (Finished) -> Void in
        self.sourceViewController.presentViewController(self.destinationViewController as UIViewController, animated: false, completion: nil)
    }


   }
}

和Custom Unwind Segue

import UIKit

class CustomScrollPagingSegueUnwind: UIStoryboardSegue {
override func perform() {
    // Assign the source and destination views to local variables.
    let secondVCView = self.sourceViewController.view as UIView!
    let firstVCView = self.destinationViewController.view as UIView!

    let screenWidth = UIScreen.mainScreen().bounds.size.width

    let window = UIApplication.sharedApplication().keyWindow
    window?.insertSubview(firstVCView, aboveSubview: secondVCView)

    // Animate the transition.
    UIView.animateWithDuration(0.5, animations: { () -> Void in
        firstVCView.frame = CGRectOffset(firstVCView.frame, screenWidth, 0.0)
        secondVCView.frame = CGRectOffset(secondVCView.frame, screenWidth, 0.0)

        }) { (Finished) -> Void in

            self.sourceViewController.dismissViewControllerAnimated(false, completion: nil)
    }
  }
}

我认为交互式转换可以获得100%相同的结果,但我不知道如何实现它们。