2013-10-10 6 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]]; 
         }]; 

Любые идеи почему экран становится черным при отмене анимации pop-the-left-pop-a-left с пользовательским переходом на навигацию?

+0

У меня такая же проблема в моем проекте ... Я использую [** this **] (http://dativestudios.com/blog/2013/ 09/29/interactive-transitions /) и выглядит так же, как вы ... Пример проекта учебника отлично работает, и я не вижу, что я сделал неправильно, за исключением того факта, что у меня есть только 1 объект анимации как для push, так и для pop, а не 2. –

ответ

2

Решенный! Я удалил все вызовы removeFromSuperview в блоке завершения анимации, и он решил его (у меня была такая же проблема, как у вас с почти тем же кодом, см. Мой комментарий к вашему q). Попробуйте удалить эти строки из своего кода:

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

Вероятно, лучше удалить их, если '[transitionContext transitionWasCancelled]' возвращает 'NO' и сохраняет их только в том случае, если анимация действительно отменена – Pieter

Смежные вопросы