为什么iOS7中的UIView transitionFromView在animateTransition中可以,但是iOS8却没有动画效果?

4

我想在presentViewController期间制作动画:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIView *toView = toVC.view;
    UIView *fromView = fromVC.view;
    UIView* containerView = [transitionContext containerView];
    [containerView addSubview:toView];
    NSTimeInterval duration = 0.35;
    [UIView transitionFromView:fromView toView:toView duration:duration options:(self.reverse?UIViewAnimationOptionTransitionFlipFromLeft:UIViewAnimationOptionTransitionFlipFromRight) | 
    UIViewAnimationOptionAllowUserInteraction completion:^(BOOL finished) {
        [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
    }];
}

在iOS 7上运作正常,但在iOS 8上没有动画效果。


你找到解决方案了吗? - DevC
Zacks,你找到解决方案了吗? - Erhan Demirci
1
我使用[UIView transitionFromView:containerView toView:toView ...让它工作了,但这不是最好的方法。 - Zacks
2个回答

2

+transitionFromView:toView:duration:options:completion: 负责处理视图层次结构。您不需要使用 [containerView addSubview:toView]

+transitionFromView:toView:duration:options:completion: 的内部实现中应该包含以下代码:

UIView *superview = fromView.superview;
[fromView removeFromSuperview];
[superview addSubview:toView];

你尝试过移除containerView代码吗:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIView *toView = toVC.view;
    UIView *fromView = fromVC.view;
    NSTimeInterval duration = 0.35;
    [UIView transitionFromView:fromView toView:toView duration:duration options:(self.reverse?UIViewAnimationOptionTransitionFlipFromLeft:UIViewAnimationOptionTransitionFlipFromRight) | 
    UIViewAnimationOptionAllowUserInteraction completion:^(BOOL finished) {
        [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
    }];
}

1
我之前尝试过这个,但是没有成功,在iOS8上使用presentViewController时没有动画效果,但在iOS7上动画效果是正常的。 - Zacks

1
尝试关闭您的代码所在的视图控制器的“使用自动布局”。现在应该可以工作了。这对我有效。当我为iOS8设置项目时,我的动画出现问题,但删除“自动布局”后它们就能正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接