我在iOS 9上调试时发现了一个奇怪的问题。在我的View Controller的viewDidLoad
中,我有这段代码:
if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {
self.edgesForExtendedLayout = UIRectEdgeNone;
}
当我推动或弹出一个新的视图控制器时,我注意到一个奇怪的动画。转换不顺利,看起来它正在显示视图控制器的“堆栈”(您可以注意到两个图像的顶部甚至略微底部)。
我在iOS 7或iOS8上没有问题,这是新发布的iOS 9的错误还是我错过了什么?
值得一提的是,我正在使用自定义动画进行推/弹视图控制器转换。
以下是其中一个覆盖UINavigationController
方法
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
UIView *theWindow = self.view;
[[theWindow layer] removeAllAnimations];
if (animated) {
CATransition *animation = [CATransition animation];
[animation setDuration:0.25];
[animation setType:kCATransitionFade];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[[theWindow layer] addAnimation:animation forKey:@""];
}
[super pushViewController:viewController animated:NO];
}
修改:
我已经调试了这个问题几个小时了。我已经重新实现了iOS 7中引入的视图控制器转换的API后面的自定义动画(navigationController:animationControllerForOperation:operation fromViewController:toViewController
),但问题仍然存在。
如果转换为alpha
属性设置动画,则会出现问题。
您是否知道如何克服这个问题?
感谢。
答案 0 :(得分:0)
您需要为toViewController设置最终帧。 transitionContext.finalFrame(for:)
可以帮助您确定它。类似的东西:
toViewController.view.frame = transitionContext.finalFrame(for: toViewController)