9

Mac OS X 用のナビゲーション コントローラー クラスを作成しています。

kCATransitionPush現在のビューをアニメーションに置き換えたい。
この投稿のように:
コア アニメーション チュートリアル - 遷移を伴うウィザード ダイアログ

は次のCATransitionように設定されます。

CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromLeft;
[self.view setAnimations:@{ @"subviews" : transition }];

ただし、ビューを置き換えると、フェード アニメーションが自動的に追加されます。

[NSAnimationContext beginGrouping];
{
    [[self.view animator] replaceSubview:_currentViewController.view with:newViewController.view];
}
[NSAnimationContext endGrouping];

フェードせずにプッシュ アニメーションを実行するにはどうすればよいですか?

4

4 に答える 4

6

ビューが CA をサポートしているかどうかに関係なく動作するスムーズなコア アニメーション トランジションを得るために私が見つけた最良の方法は、次のことです。

  1. NSView -cacheDisplayInRect:toBitmapImageRepまたは同様の方法を使用して、アニメーション化しようとしているビューの画像を作成します
  2. その画像を NSImageView に入れます
  3. 画像ビューをレイヤーバックします。これにより、レイヤーバック時にグリッチなしでうまく描画されます
  4. 移行しようとしているビューサブビューとして画像ビューを追加します
  5. NSView のアニメーター プロキシを使用して画像ビュー フレームをアニメーション化する
  6. アニメーションが完了したら、画像ビューを削除します
于 2013-03-19T18:22:09.043 に答える
1

暗黙のアニメーションが発生していると思われます.コア アニメーションは、独自のトランザクションの外部で発生するレイヤー プロパティの変更を自動的にアニメーション化します。

これらの 2 つの質問には、これらの暗黙的なアニメーションを無効にするためのいくつかの方法の優れた要約があります。

CALayer の暗黙的なアニメーションを無効にするには?

-[CALayer setNeedsDisplayInRect:] で暗黙的なアニメーションを無効にする

...コア アニメーションのドキュメントで暗黙的なトランザクションの詳細を読むことができます

于 2013-01-12T13:37:25.603 に答える
1

左トランジションからのトランジションには組み込みのフェードが含まれていると思います。IOS プッシュ トランジションが行います。

それが望ましくない場合は、Core Animation を使用して独自のプッシュ トランジションをロールする必要がある場合があります。これは、UIView アニメーションを使用する iOS では簡単です。残念ながら、Mac OS には同等の機能がありません。Apple が戻って、Mac OS にビュー アニメーションを追加してくれることを願っています。私は iOS でそれらを使うのに甘やかされてしまい、Mac アプリケーションで作業しているとそれらが恋しくなります。

于 2013-01-13T01:24:17.367 に答える