2013-10-10 47 views
4

我正在实现自定义的导航转换,并使用UIPercentDrivenInteractiveTransition来完成这个技巧。UIPercentDrivenInteractiveTransition cancelTransition将屏幕变成黑色

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

这里是我的代码,跟踪手势:

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

任何想法为什么当用自定义导航过渡取消从左侧滑动的动画时屏幕变黑?

+0

我在我的项目中有完全相同的问题...我使用[** this **](http://dativestudios.com/blog/2013/ 09/29/interactive-transitions /)教程,看起来也像你...本教程的示例项目工作正常,我看不到我做错了什么,除了事实上我只有1个动画对象同时用于推送和弹出而不是2. –

回答

2

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

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

如果'[transitionContext transitionWasCancelled]'返回'NO',仍然可以移除它们,如果动画确实被取消 – Pieter