ポップオーバー内のナビゲート可能なビューのiTunes11の動作を再現しようとしています。contentSize
ただし、ポップオーバーの変更と同時にアニメーションを実行する方法を見つけることができないようです。
私が持っている基本的なセットアップは、2つのサブビューを持つカスタムビューサブクラスMyPopoverNavigationViewです。ポップオーバー間を移動する古いビューと新しいビューです。ポップオーバーcontentViewController
には、MyPopoverNavigationViewインスタンスがありますview
。私はこれをします:
// Configure constraints how I want them to show the new popover view
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *ctx) {
[ctx setDuration:0.25];
[ctx setAllowsImplicitAnimation:YES];
[self layoutSubtreeIfNeeded];
} completionHandler:nil];
Auto Layout WWDC 2012のビデオからわかる限り、これは、制約の変更の結果としてビューのフレームの変更をアニメーション化するための推奨される方法です。動作しますが、アニメーションは2つのフェーズで発生します。
- まず、ポップオーバーは、
contentSize
移動先の新しいビューに対応するように変更されます(そのビューが表示される前に、既存のコンテンツが部分的に隠されます)。 - 次に、ビューが期待どおりにアニメーション化されるため、インストールした制約システムが満たされます。
-layoutSubtreeIfNeeded
いくつかのブレークポイントを設定すると、最終的には、と呼ばれるポップオーバーでプライベートメソッドを呼び出すように見えます。_fromConstraintsSetWindowFrame:
これは、アニメーショングループの外部でポップオーバーサイズのアニメーションを実行します。私のコンテキストの継続時間は尊重されず、ポップオーバーのサイズ変更が完了するまでアニメーションは実行されません。
ポップオーバーのサイズ変更と一緒にビューをアニメーション化するにはどうすればよいですか?