0

我正在尝试向 UINavigationController 添加一个很酷的动画效果,但是我发现一旦我这样做,它会弄乱显示在其他视图之上的其他视图,这些视图应该在它之上。

例如navivc 是一个UINavigationController overlayview 是navivc 的superview 的子视图,并且放置在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 的视图显示在覆盖视图的顶部。

似乎问题只发生在“变换”路径上,我尝试了其他关键路径,例如位置、比例、平移等,所有这些似乎都是正确的。但是 3D 变换弄乱了顶部的视图。

4

1 回答 1

0

我建议不要为视图控制器的内容视图设置动画。相反,在视图控制器的内容视图中创建一个容器视图并为其设置动画。

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

于 2012-09-26T12:04:29.623 回答