我正在尝试为UINavigationController添加一个很酷的动画效果,但是我发现,一旦我这样做,它就会搞砸其他视图上显示的其他视图,这些视图假设在它之上。
e.g。 navivc是一个UINavigationController overlayview是navivc超级视图的子视图,位于navivc之上。
...
CATransform3D t1 = CATransform3DIdentity;
t1.m34 = 1.0/-900;
t1 = CATransform3DScale(t1, 0.7, 0.7, 0.3);
t1 = CATransform3DRotate(t1, 15.0f*M_PI/180.0f, 1, 0, 0);
CABasicAnimation *move = [CABasicAnimation animationWithKeyPath:@"transform" ];
//[move setFromValue:[NSNumber numberWithFloat:0.0f]];
[move setToValue:[NSNumber valueWithCATransform3D:t1]];
[move setDuration:0.3f];
move.removedOnCompletion = NO;
move.fillMode = kCAFillModeForwards;
[move setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
CAAnimationGroup *group = [CAAnimationGroup animation];
group.fillMode = kCAFillModeForwards;
group.removedOnCompletion = NO;
[group setDuration:0.3f];
[group setAnimations:[NSArray arrayWithObjects:move, nil]];
[navivc.view.layer addAnimation:move forKey:@"coolanimation"];
...
动画正常且正确,但现在navivc的视图显示在overlayview之上。
似乎问题只发生在“转换”路径上,我尝试了其他关键路径,例如位置,规模,翻译等,所有这些看起来都是正确的。但3D变换搞砸了顶部的视图。
答案 0 :(得分:0)
我建议不要动画视图控制器的内容视图。而是在视图控制器的内容视图中创建容器视图并为其设置动画。
从您的帖子中不清楚overlayView在您的视图层次结构中的位置,因此很难为您提供有关如何阻止动画覆盖叠加视图的具体说明。您可以尝试更改overlayView图层的zPosition,使其显示在您要设置动画的图层上方。