查看具有快照的过渡动画

时间:2015-05-07 16:43:52

标签: ios swift uiviewanimationtransition

我有几个滑动和平移手势来浏览一些视图。当我平移视图时,将实例化一个新的ViewController并将其放置在窗口的边缘。沿着我的平底锅,视图将在当前视图的顶部进入视图。如果平移已经过了一半,新视图将自动完成并替换当前视图,并在完成时删除旧视图。

var newViewController: UIViewController! {
    didSet {
        if let newView = NewViewController {
            addChildViewController(newView)
            newView.view.frame.origin.x = view.bounds.width }
            view.addSubview(newView.view)
            newView.didMoveToParentViewController(self)
        }
    }
}

var currentViewController: UIViewController! {
    didSet(oldView) {
        oldViewController = oldView
        newViewController = nil
    }
}

var oldViewController: UIViewController!

func removeViewController() {
    if let oldView = oldViewController {
        oldView.willMoveToParentViewController(nil)
        oldView.view.removeFromSuperview()
        oldView.removeFromParentViewController()

        oldViewController = nil
    }
}

newViewController = NewVIewController()
currentViewController = newViewController

UIView.animateWithDuration(2.5, delay: 0, usingSpringWithDamping: 0.8, initialSpringVelocity: 0, options: .CurveEaseInOut, animations: {
    self.currentViewController.view.frame.origin.x = 0 }) { _ in
        self.removeViewController()
}

在完成动画时,旧视图将被处理。但是为了让我的应用更具响应性,我想立即致电removeViewController并保持快照"对于oldView,转换仍然看起来一样。

我应该使用其他方法来转换视图吗?

2 个答案:

答案 0 :(得分:0)

触发滑动事件后,跟踪平移手势为时已晚。相反,请考虑使用uiscreenedgegesturerecognizer

答案 1 :(得分:0)

问题在于,这不是您进行交互式视图控制器转换的方式。您需要触发实际的视图控制器转换(例如,调用presentViewController)并提供UIViewControllerInteractiveTransitioning对象。