0

我的要求是当我从屏幕右侧滑动时(视图控制器 A)然后需要使用交互式转换推送到下一个视图控制器(视图控制器 B)。当我从屏幕左侧滑动时(视图控制器 B)也使用相同的关闭机制它使用交互式转换关闭控制器。如何以正确的方式实现它。我已经使用交互式转换实现了关闭视图控制器,但无法使用交互式转换实现推送到视图控制器

   #import "AMSimpleAnimatedDismissal.h"

@implementation AMSimpleAnimatedDismissal
-(NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext
{
    return 1.5f;
}

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    [[transitionContext containerView]addSubview:toVC.view];
    CGRect toFrame = toVC.view.frame;
    CGRect initialFrame = fromVC.view.frame;
    toVC.view.frame = CGRectMake(-320 ,0, CGRectGetWidth(toFrame) , CGRectGetHeight(toFrame));

    CGRect finalFrame = CGRectMake(initialFrame.size.width, initialFrame.origin.y, initialFrame.size.width, initialFrame.size.height);
    UIViewAnimationOptions opts = UIViewAnimationOptionCurveLinear;
    [UIView animateWithDuration:1.0 delay:0 options:opts animations:^{
        fromVC.view.frame = finalFrame;
        toVC.view.frame = CGRectMake(0, 0, CGRectGetWidth(fromVC.view.frame), CGRectGetHeight(fromVC.view.frame));
    } completion:^(BOOL finished) {
       [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
    }];

}

这些是我的交互式过渡部分的代码行

4

2 回答 2

2

可以设置滑动手势的方向:当调用动作方法时,只需检查滑动的方向,如果方向是UISwipeGestureRecognizerDirectionRightuse [self.navigationController popViewControllerAnimated:BOOL]。您可能想要添加一个 " isPop" BOOL 属性AMSimpleAnimatedDismissal并让此类处理演示和解雇。

于 2014-06-16T14:23:01.060 回答
0

如果使用导航控制器进行交互式自定义转换,您必须:

  • delegate为您指定UINavigationController

  • UINavigationControllerDelegate必须在以下委托协议方法中指定动画控制器:

    - (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                      animationControllerForOperation:(UINavigationControllerOperation)operation
                                                   fromViewController:(UIViewController *)fromVC
                                                     toViewController:(UIViewController *)toVC
    
  • 如果您希望推送是交互式的,您还必须在以下方法中指定一个交互控制器:

    - (id<UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController
                             interactionControllerForAnimationController:(id<UIViewControllerAnimatedTransitioning>)animationController
    

    此方法通常应返回一个UIPercentDrivenInteractiveTransitionif 由手势启动,否则返回nil

  • 您必须在视图上添加手势识别器(例如 a UISwipeFromEdgeGestureRecognizer),这将启动转换并更新UIPercentDrivenInteractiveTransition上述interactionControllerForAnimationController方法返回的转换,并在手势完成时完成或取消转换。

于 2014-10-30T02:34:25.067 回答