addAnimation到UINavigationController导致UINavigationController的视图(图层)显示在最顶层

时间:2012-09-26 07:28:37

标签: ios uinavigationcontroller core-animation

我正在尝试为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变换搞砸了顶部的视图。

1 个答案:

答案 0 :(得分:0)

我建议不要动画视图控制器的内容视图。而是在视图控制器的内容视图中创建容器视图并为其设置动画。

从您的帖子中不清楚overlayView在您的视图层次结构中的位置,因此很难为您提供有关如何阻止动画覆盖叠加视图的具体说明。您可以尝试更改overlayView图层的zPosition,使其显示在您要设置动画的图层上方。