0

被这个给难住了。

我有一个 UIViewController 子类,它的一个视图中添加了 panGesture。这不是让它继承 UIViewController 的主要原因;它还为其他viewControllers继承提供了一定的美感。控制器符合 UIViewControllerTransitioningDelegate 并在成功初始化时将其自身的 transitioningDelegate 属性设置为自身。然后它还将 modalPresentationStyle 属性设置为自定义。

它在委托方法中提供了用于呈现和解除的动画器以及用于解除的交互控制器,它只是 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
    }

UIViewControllerTransitioningDelegate()interactionControllerDismissal 的委托方法只返回如下变量:

func interactionControllerForDismissal(animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? {

    return interactionController
}

我是否通过仅将其部分显示在屏幕上而错误地呈现了 viewController?这是在屏幕上显示它的正确方法吗?

4

0 回答 0