presentModalViewControllerのアニメーション速度を上げることはできますか?
-
20-08-2019 - |
質問
ユーザーがツールバーの項目をクリックしたときにツールビューコントローラーを表示する描画アプリケーションを作成しています。ただし、私のベータ テスターの何人かが、ツールの口蓋が開くのが遅すぎると報告しています。私は標準の presentModalViewController:animated を使用しています。を呼び出してツールを表示し、速度を上げるために次のようなコードブロックでラップしてみました。
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration: 0.1];
[self presentModalViewController:settings animated:YES];
[UIView commitAnimations];
残念ながら、それはうまくいきません。「animated:NO」と指定すると、より適切に動作しますが、基礎となる描画キャンバス ビューがすぐに削除されるため (コントローラはビューが表示されなくなったと判断するため)、アニメーションは白い背景上で行われます。
これまでにこれを行ったことがあって、アドバイスを提供してくれる人はいますか?私はそれを感謝します!
解決
同様の質問がされた >。
また、この技術を用いて速度を変更することができますが、あなたが提案してきたように、私の実験では、それは、空白の背景の上にそうします。
他のヒント
編集:iOS 5 以降のコントローラーの封じ込めに関する別のオプションを追加しました。
別の解決策は、レイヤーの時間空間を設定することです。
これは、CALayer の速度プロパティを通じて行われます。アニメーションの速度を下げるには、以下を使用できます。
MytransparentVCViewController *vc = [[MytransparentVCViewController alloc] initWithNibName:@"MytransparentVCViewController" bundle:nil];
// Makes all animations 10 times slower
// To speed it up, set it to multiples of 1: 2 is 2 times faster, 3 is 3 times faster etc
vc.view.layer.speed = 0.1;
[self presentModalViewController:vc animated:YES];
リンクされた投稿で提案されている解決策は、これから提示しようとしているモーダル ビュー コントローラーのアニメーション速度を変更することが目的の場合 (たとえば、UIModalTransitionStyleCoverVertical を使用する場合) は機能しないことに注意してください。
レイヤーの速度は絶対値ではなく、そのレイヤーの親時間空間の関数です (もちろんレイヤーがレイヤー階層のルートにある場合を除く)。たとえば、レイヤーの速度を 2 に設定すると、そのアニメーションはそのレイヤーの親のアニメーションと比較して 2 倍の速度で実行されます。
さらに別のオプションは、ビュー コントローラーの包含を使用することです。(iOS 5以降のみ)
UIViewController のtransitionFromViewController:toViewController:duration:options:animations:completion: を使用して、アニメーションを完全に制御できます。