iphone - UIPercentDrivenInteractiveTransition cancelTransition 将屏幕变黑

标签 iphone uikit ios7

我正在实现自定义导航转换,并使用 UIPercentDrivenInteractiveTransition 来实现这一点。

我的非交互式过渡工作正常,并且我正在使用动画 block 来处理过渡动画,但是一旦添加了交互式过渡,如果取消过渡,屏幕现在会变黑。

这是我跟踪手势的代码:

-(void)userDidPan:(UIScreenEdgePanGestureRecognizer *)recognizer {
        CGPoint location = [recognizer locationInView:nil];

    if (recognizer.state == UIGestureRecognizerStateBegan) {
        // We're being invoked via a gesture recognizer – we are necessarily interactive
        self.hasActiveInteraction = YES;
        self.interactiveTransition = [BXTPercentDrivenInteractiveTransition new];
        [[BXTNavigationController sharedNavigationController] popViewControllerAnimated:YES];
    }
    else if (recognizer.state == UIGestureRecognizerStateChanged) {
        CGFloat ratio = location.x / CGRectGetWidth(recognizer.view.frame);
        NSLog(@"Percentage complete: %0.2f",ratio*100);
        [self.interactiveTransition updateInteractiveTransition:ratio];
    }
    else if (recognizer.state == UIGestureRecognizerStateEnded) {
        // Depending on our state and the velocity, determine whether to cancel or complete the transition.
        CGFloat ratio = location.x / CGRectGetWidth(recognizer.view.frame);
        if (ratio > 0.50) {
            NSLog(@"Completing");
            [self.interactiveTransition finishInteractiveTransition];
        }
        else {
            NSLog(@"Canceling");
            [self.interactiveTransition cancelInteractiveTransition];
        }
    }
}

...这是弹出 View Controller 时我的动画 block 的(缩写)外观:

[UIView animateWithDuration:kBXTNavigationTimingDuration
                              delay:0
                            options:animationOption
                         animations:^{
                             toVC.view.frame = destinationFrameForPoppedView; 
                             fromVC.view.frame = CGRectOffset(fromVC.view.frame, fromVC.view.frame.size.width, 0);

                         } completion:^(BOOL finished) {
                             [darkeningView removeFromSuperview];
                             [_transition.secondaryTransitionViews enumerateObjectsUsingBlock:^(BXTTransitionView *transitionView, NSUInteger idx, BOOL *stop) {
                                 [transitionView.view removeFromSuperview];
                             }];

                             [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
                         }];

您知道为什么在使用自定义导航过渡取消从左滑动弹出动画时屏幕会变黑吗?

最佳答案

解决了!我删除了动画完成 block 中的所有 removeFromSuperview 调用并解决了它(我和你有同样的问题,代码几乎相同,请参阅我对你的 q' 的评论)。尝试从代码中删除这些行:

[darkeningView removeFromSuperview];
[_transition.secondaryTransitionViews enumerateObjectsUsingBlock:^(BXTTransitionView *transitionView, NSUInteger idx, BOOL *stop) {
    [transitionView.view removeFromSuperview];
}];

关于iphone - UIPercentDrivenInteractiveTransition cancelTransition 将屏幕变黑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19287800/

相关文章:

Android页面控件像iPhone页面控件

iphone - UIAutomation 可以用于 CI 吗?

iphone - 使用 CAShape Layer 绘制两条平行线

ios - 如何用一个动画删除所有子 UIViewController 的动画?

Swift:使 UIView 的轮廓看起来像草图

iphone - 如何在导航 Controller 之间切换?

ios - 取消呈现的 View Controller 的交互式关闭转换后, View Controller 不会自动旋转

iphone - “paymentWithProductIdentifier ”已弃用

ios - 未收到Facebook App邀请

ios - 从 TextFieldOnEditingDidEnd 内部调用 BecomeFirstResponder 时,iOS 6.1 中的 StackOverflow