UIPercentDriventInteractionController仅在iOS 7.0中出错

时间:2015-01-13 14:30:35

标签: ios ios7 uinavigationcontroller uiviewanimationtransition

我已经为UINavigationController实现了一个自定义转换,它在演示时会缩放呈现视图,并且在关闭时会缩小视图控制器被撤回。

我还实施了百分比驱动的互动。

我有一个奇怪的错误,只发生在iOS 7.0。*(我的应用程序的目标是7.0及以上)。仅在某些屏幕上(但可重复),如果我通过调用cancelInteractiveTransition对象上的UIPercentDrivenInteractiveTransition来取消百分比驱动转换,而不是取消转换,则会显示顶视图控制器视图,并在UIView动画中设置属性我的UIViewControllerContextTransitioning对象用于解雇动画的块。

因此,例如,如果我设置解雇动画以将解雇视图控制器缩小到50%,我会看到顶视图控制器缩放到50%,后面有黑色屏幕,而不是应该是全尺寸,因为它应该是我已取消过渡。

一切都适用于iOS 7.1及更高版本,以及iOS 7.0中的一些scree。

之前有没有人见过这样的事情或者知道问题可能是什么?

以下是一些代码:

UINavigationControllerDelegate协议方法的实现:

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC
{
    if (UINavigationControllerOperationNone)
    {
        return nil;
    }

    if (operation == UINavigationControllerOperationPush)
    {
        self.transitionAnimator.type = AnimationTypePresent;
        return self.transitionAnimator;
    }

    if (operation == UINavigationControllerOperationPop)
    {
        self.transitionAnimator.type = AnimationTypeDismiss;
        return self.transitionAnimator;
    }

    return nil;
}

- (id<UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController 
*)navigationController interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController
    {
        return self.interactionController;
    }

开始交互式转换的代码:

- (void)edgePanGestureBegan:(UIScreenEdgePanGestureRecognizer *)recognizer
{
    if (!self.transitionCoordinator) {
        self.interactionController = [UIPercentDrivenInteractiveTransition new];
        [self popViewControllerAnimated:YES];
    }
}

取消转换的代码:

 [self.interactionController cancelInteractiveTransition];

以及我UIViewControllerContextTransitioning对象中的相关代码:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    UIView *containerView = [transitionContext containerView];
    UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    if (self.type == AnimationTypePresent) {
        ...
    } else if (self.type == AnimationTypeDismiss) {
        [containerView insertSubview:toViewController.view belowSubview:fromViewController.view];
        [UIView animateWithDuration:[self transitionDuration:transitionContext]
                         animations:^{
                             CATransform3D transform = CATransform3DMakeScale(0.01, 0.01, 1.0);
                             fromViewController.view.layer.transform = transform;
                         }
                         completion:^(BOOL finished) {
                             [transitionContext completeTransition:!transitionContext.transitionWasCancelled];
                         }];
    }
}

0 个答案:

没有答案