2013-10-10 45 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