动画以自定义交互式过渡动画中的错误结束?

时间:2015-03-08 10:04:31

标签: ios core-animation uiviewanimationtransition

我正在设置自定义转换动画。一切正常,除了动画结尾的错误:

enter image description here

如您所见,在交互式动画之后,动画再次出现。

这是我用来处理类中符合UIPercentDrivenInteractiveTransitionUIViewControllerAnimatedTransitioning的交互式手势的方法:

func handlePan(recognizer: UIPanGestureRecognizer) {
    let maxMov:CGFloat = -300
    let translation = recognizer.translationInView(recognizer.view!.superview!)
    if(translation.y < 0){
        let value = (translation.y < maxMov) ? maxMov : translation.y
        let progress = value / maxMov
        switch recognizer.state {
        case .Changed:
            updateInteractiveTransition(progress)

        case .Cancelled, .Ended:                
            if progress < 0.5 {
                self.cancelInteractiveTransition()

            } else {
                self.finishInteractiveTransition()
            }
        default:
            break
        }
    }
}

1 个答案:

答案 0 :(得分:0)

自定义转换动画基于CAAnimation,其时间由CAMediaTiming控制。在handlePan方法中,您应该在转换中重置容器视图的currentTiming。

首先,定义一个存储的上下文,稍后将在animateTransition方法中分配。

var storedContext: UIViewControllerContextTransitioning?

然后进入:

    func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
    storedContext = transitionContext
    ....}

然后在你的handlePan中:

        case .Cancelled, .Ended:
            let transitionLayer = storedContext!.containerView().layer
            transitionLayer.beginTime = CACurrentMediaTime()
        ....

这可确保containerLayer的开始时间等于您取消或结束手势的时间!如果没有这个过程,就会发生重复的动画。