【问题标题】:iOS7 Custom transition called twiceiOS7自定义过渡调用了两次
【发布时间】:2014-08-24 21:33:37
【问题描述】:

我想为UITabBarController 的选项卡之间的过渡设置动画。出于某种原因,UIViewControllerAnimatedTransitioning 协议中的这个方法被调用了两次:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext

堆栈跟踪: 紧接着: - (void)animationEnded:(BOOL)transitionCompleted 方法也被调用了两次。

我不知道为什么。

这是代码:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {

    UIView *containerView = [transitionContext containerView];

    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    [toVC.view setTransform:CGAffineTransformMakeTranslation(320, 0)];

    [containerView addSubview:toVC.view];

    [UIView animateWithDuration:0.5 animations:^{
        [toVC.view setTransform:CGAffineTransformIdentity];
        [fromVC.view setTransform:CGAffineTransformMakeTranslation(-320, 0)];
    } completion:^(BOOL finished) {
        [fromVC.view setTransform:CGAffineTransformIdentity];
        [toVC.view setTransform:CGAffineTransformIdentity];
        [transitionContext completeTransition:YES];
    }];

}

【问题讨论】:

  • 如何开始过渡?赛格?调用方法?

标签: ios ios7 uitabbarcontroller transitions


【解决方案1】:

对于第一印象,我相信 - (void)animationEnded:(BOOL)transitionCompleted 被调用了两次,因为你调用了 [transitionContext completeTransition:YES] ,它基于苹果文档:

在动画完成后调用此方法通知系统过渡动画完成。此方法的默认实现调用动画制作者的 animationEnded: 方法,使其有机会执行任何最后一分钟的清理工作。

如果UIViewControllerAnimatedTransitioning 被调用了两次,那么就可以了。

为了进一步分析为什么UIViewControllerAnimatedTransitioning 被调用两次,我很高兴看到你的animationControllerForPresentedControlleranimationControllerForDismissedController 实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多