0

UINavigationController にクールなアニメーション効果を追加しようとしていますが、それを行うと、その上にあると思われる他のビューの上に表示される他のビューが台無しになることがわかりました。

たとえば、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 のビューがオーバーレイ ビューの上に表示されるようになりました。

問題は「変換」パスでのみ発生するようでした。位置、スケール、変換などの他の主要なパスを試してみましたが、それらはすべて正しいようでした。しかし、3D 変換により、上部のビューが台無しになりました。

4

1 に答える 1

0

ビュー コントローラーのコンテンツ ビューをアニメーション化しないことをお勧めします。代わりに、ビュー コントローラーのコンテンツ ビュー内にコンテナー ビューを作成し、それをアニメーション化します。

投稿からは、overlayView がビュー階層のどこにあるかが明確ではないため、アニメーションがオーバーレイ ビューをカバーしないようにする方法について具体的な指示を与えることは困難です。overlayView のレイヤーの zPosition を変更して、アニメーション化しているレイヤーの上に表示されるようにしてみてください。

于 2012-09-26T12:04:29.623 に答える