难倒在这一个。
我有一个UIViewController子类,它的一个视图上添加了panGesture。这不是让它成为UIViewController子类的主要原因;它还为其他viewControllers提供了一定的美学继承。控制器符合UIViewControllerTransitioningDelegate,并在成功初始化时将transitioningDelegate属性设置为自身。然后它还将modalPresentationStyle属性设置为自定义。
它在委托方法中提供了用于呈现和解雇的动画师以及用于解雇的interactionController,它只是UIPercentDrivenInteractiveTransition()的一个实例。
顺便说一下,这个视图总是部分呈现在屏幕上。当使用手势解散时,除非panGesture的yOffset为负值,否则一切都会正常运行。如果手势以负Y偏移结束,则交互控制器会按预期取消交互式转换,但之后由panGesture注册的所有触摸都不会在视觉上反映。
经过一些打印后,我注意到transitioningDelegate没有被缩小,而且presentationStyle也没有改变。 UIViewControllerTransitioningDelegate的委托方法停止被调用。我无法弄清楚为什么会这样。
在自定义初始化程序和NSCoder所需的初始化程序之后调用它。
private func setup() {
transitioningDelegate = self
modalPresentationStyle = .Custom
}
在viewDidLoad()
内,会发生以下情况。
panGesture.addTarget(self, action: "handlePan:")
panGesture.delegate = self
view.addGestureRecognizer(panGesture)
平底锅的处理看起来像这样:
switch gesture.state {
case .Began :
interactionController = UIPercentDrivenInteractiveTransition()
dismissViewControllerAnimated(true, completion: nil)
case .Changed:
interactionController.updateInteractiveTransition(percentage)
case .Cancelled, .Failed, .Ended:
if (gesture.velocityInView(view).y < 0) {
interactionController.cancelInteractiveTransition()
if gesture.translationInView(view).y < 0 {
print("This is when things go weird.")
}
}
else {
interactionController.finishInteractiveTransition()
}
default:
let _ = 0
}
interactiveControllerDismissal的UIViewControllerTransitioningDelegate()
委托方法只返回如下变量:
func interactionControllerForDismissal(animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {
return interactionController
}
我是否只是部分地在屏幕上显示了viewController?这是将它放在屏幕上的正确方法吗?