自定义UIViewController过渡并发症

时间:2015-10-06 10:01:49

标签: ios swift uiviewcontroller custom-transition

难倒在这一个。

我有一个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?这是将它放在屏幕上的正确方法吗?

0 个答案:

没有答案