5

カスタム ナビゲーション トランジションを実装し、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];
        }
    }
}

...そして、View Controllerからポップオフするときのアニメーションブロックの(省略された)外観は次のとおりです。

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

カスタム ナビゲーション トランジションで左からスワイプのポップ アニメーションをキャンセルすると、画面が真っ暗になる理由はありますか?

4

1 に答える 1