2

カスタムUIViewトランジションを作成しようとしています。基本的に、特定のモーダルビューが表示されると、それが覆っているビューが背景に移動します。

これを実現するために、Core Animationを使用して、ビューのレイヤーでCATransform3Dを操作し、背景に移動して、その上にモーダルビューを表示しています。

ビューを背景に移動するために、CABasicAnimationを作成して、このようにCATransform3Dの変更をアニメーション化します。

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];

CATransform3D toTransform = CATransform3DIdentity;
toTransform.m34 = 1.0f / -500.0f;
toTransform = CATransform3DTranslate(toTransform, 0.0f, 0.0f, -40.0f);

[animation setFromValue:[NSValue valueWithCATransform3D:CATransform3DIdentity]];
[animation setToValue:[NSValue valueWithCATransform3D:toTransform]];
[animation setDuration:1.0f];

self.menuView.layer.transform = toTransform;
[self.menuView.layer addAnimation:animation forKey:@"moveBackAnimation];

self.menuViewは、私が戻っているビューです。

これは、モーダルビューを追加するまではうまく機能します。

RVLAddViewController *addViewController = [[RVLAddViewController alloc] initWithNibName:@"RVLAddViewController" bundle:nil];
[self presentViewController:addViewController animated:YES completion:nil];

ボタンが押されたときにアニメーションのすぐ下でこのコードを呼び出します。このコードが表示されない場合、すべてが期待どおりに機能し、ビューは遠くにフェードインしているように見え、その後はそこにとどまります。

モーダルビューが表示されると、徐々に遠くにフェードインするのではなく、小さいサイズに縮小して左上隅に移動します。

サンプルアプリケーションをできるだけ早くアップロードします。githubは現在ダウンしています。編集必要ありません-解決策が与えられました!/編集

4

1 に答える 1

1

しばらくこれをいじりましたが、自動レイアウトに関係しているようです。これをオフにすると、期待どおりに機能します。

于 2012-12-23T05:58:48.720 に答える