【发布时间】:2014-12-28 02:33:14
【问题描述】:
我想在 ViewController (1) 和 NavigationViewController (2) 之间进行交互转换。
NavigationController 由按钮调用,因此在呈现时没有交互式过渡。它可以通过按钮或 UIPanGestureRecognizer 关闭,因此可以交互方式关闭或不关闭。
我有一个名为 TransitionManager 的对象,用于 UIPercentDrivenInteractiveTransition 的转换子类。
下面代码的问题是两个委托方法interactionControllerFor... 从未被调用。
此外,当我按下按钮或滑动 (UIPanGestureRecognizer) 时,模态转场的基本动画就完成了。所以animationControllerFor...这两个委托方法也不起作用。
有什么想法吗?谢谢
ViewController.swift
let transitionManager = TransitionManager()
override func viewDidLoad() {
super.viewDidLoad()
self.transitioningDelegate = transitionManager
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let dest = segue.destinationViewController as UIViewController
dest.transitioningDelegate = transitionManager
dest.modalPresentationStyle = .Custom
}
TransitionManager.swift
class TransitionPushManager: UIPercentDrivenInteractiveTransition,
UINavigationControllerDelegate, UIViewControllerTransitioningDelegate {
@IBOutlet var navigationController: UINavigationController!
var animation : Animator! // Implement UIViewControllerAnimatedTransitioning protocol
override func awakeFromNib() {
var panGesture = UIPanGestureRecognizer(target: self, action: "gestureHandler:")
navigationController.view.addGestureRecognizer(panGesture)
animation = Animator()
}
func gestureHandler(pan : UIPanGestureRecognizer) {
switch pan.state {
case .Began :
interactive = true
navigationController.presentingViewController?.dismissViewControllerAnimated(true, completion:nil)
case .Changed :
...
default :
...
interactive = false
}
}
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return animation
}
func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
return animation
}
func interactionControllerForPresentation(animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {
return nil
}
func interactionControllerForDismissal(animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {
return self.interactive ? self : nil
}
Main.storyboard
ViewController 上的按钮触发模态 segue 以呈现 NavigationController
NavigationController 的代理出口链接到 TransitionManager 类的对象
NavigationController 在TransitionManager 类中由属性“navigationController”引用
【问题讨论】:
标签: ios swift delegates transition interactive