难倒在这一个 .

我有一个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
    }

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

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

    return interactionController
}

我是否仅仅部分地在屏幕上显示了viewController?这是将它放在屏幕上的正确方法吗?