【问题标题】:UIPercentDrivenInteractiveTransition cancelTransition turns screen blackUIPercentDrivenInteractiveTransition cancelTransition 使屏幕变黑
【发布时间】:2013-10-10 05:33:02
【问题描述】:

我正在实现自定义导航转换,并使用 UIPercentDrivenInteractiveTransition 来解决问题。

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

这是我跟踪手势的代码:

-(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];
        }
    }
}

...当我从视图控制器中弹出时,这是我的动画块的(缩写):

[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]];
                         }];

任何想法为什么在使用自定义导航转换取消从左侧滑动弹出动画时屏幕变黑?

【问题讨论】:

  • 我的项目中遇到了完全相同的问题...我正在使用this 教程,看起来也像您...教程的示例项目工作正常,我看不到我做错了什么,除了我只有 1 个用于 push 和 pop 的动画对象而不是 2 个。

标签: iphone uikit ios7


【解决方案1】:

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

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

【讨论】:

  • 如果[transitionContext transitionWasCancelled]返回NO,最好还是删除它们,并且只有在动画确实取消时才保留它们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多