我有几个滑动和平移手势来浏览一些视图。当我平移视图时,将实例化一个新的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,转换仍然看起来一样。
我应该使用其他方法来转换视图吗?
答案 0 :(得分:0)
触发滑动事件后,跟踪平移手势为时已晚。相反,请考虑使用uiscreenedgegesturerecognizer
答案 1 :(得分:0)
问题在于,这不是您进行交互式视图控制器转换的方式。您需要触发实际的视图控制器转换(例如,调用presentViewController
)并提供UIViewControllerInteractiveTransitioning对象。