0

次のコードを使用してビュー間を移行しています。

// Populate view2 here
UIView *theWindow = [_view2 superview];
[_view2 removeFromSuperview];

CATransition *animation = [CATransition animation];
[animation setDuration:0.25f];
[animation setType:kCATransitionPush];
[animation setSubtype:kCATransitionFromRight];
[animation setTimingFunction:[CAMediaTimingFunction
            functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];

[[theWindow layer] addAnimation:animation forKey:@"SwitchToSecondView"];

これは機能しますが、移行は完全にスムーズではありません。iPhone4 デバイス v5.1.1 でテストしています。どちらのビューにも約 20 のサブビューを含む UINavigationView、UIScrollView が含まれています。アニメーションの完了後にビューを作成することを検討しましたが、可能であればこれを避けたいと考えています。トランジションの滑らかさを 7/10 と評価します。
この移行をできるだけスムーズにするにはどうすればよいですか?

4

2 に答える 2

1

20 個のサブビューを含むスクロールビューが問題の原因です。それを証明するにはコード自体を確認する必要がありますが、多くのサブビューを持つスクロール ビューを作成しようとしたときに同じ問題が発生し、最終結果はUITableView(remember UITableViewis a subclass of UIScrollView) と同様に動作しました。注: これが原因であることを証明するのは簡単です.. UIScrollView の 20 個のサブビューを削除してから、アニメーションを実行するだけです.. ラグがなくなった場合、これは十分な証拠です.

数千行になる可能性があることに注意してくださいUITableView..しかし、その設計方法は、画面に表示されなくなったセルを再利用することです (つまり、必要になるたびに新しいビューを作成するのではなく、プールからビューをリサイクルします)。つまり、画面に表示される行よりも多くの行をメモリに保持する余裕はありません。そうしないと、遅延が発生します。

したがって、20 個のサブビューを使用してスクロールビューに戻り、画面に表示されているサブビューのみを何らかの方法で使用する方法を見つけ、毎回新しいサブビューの割り当てを解除して割り当てる代わりに、それらを同じ方法で再利用しUITableViewます。

aが実際に舞台裏でどのように作成されているかについては、この興味深い投稿をご覧ください。遅延を回避するために独自のものを最適化する方法のアイデアが得られると確信しています。UITableViewscrollview

更新: コメントのビュー階層の詳細に基づいて..これが私がすることです

  1. 私は遷移を行い UIImageViewsますが、画面に収まる n 個の量 (つまり、あなたの場合は 7) のみを表示します..UIAnimation 完了ブロックハンドラーで、残りのビューを追加します
  2. 上記では不十分な場合は、UIAnimation 完了ハンドラーのビューにも画像を読み込みます。
  3. 上記が不十分な場合.. 2 つの UIButtons と 2 つの UILabels も、完了ハンドラーのサブビューにアタッチします。

ここにパターンが見えますか?このアイデアは試行錯誤に焦点を当てたものです。最もコストのかかる操作を移行から 1 つずつ削除し、移行が完了した後に配置します。必要に応じて、アニメーションの最後に押し戻された UIView をフィラーで置き換えることができます (つまり、画像のプレースホルダー、スピナーなどを考えてください。これらの置換の選択は、実際には UX の原則と、あなたが美的に信じるものに左右されます。ユーザーに喜ばれる)

于 2013-09-02T03:04:22.807 に答える
0

Instruments.app を実行して、何が CPU 時間を消費しているかを確認してください。これを減らすと、吃音も減り、アニメーションがスムーズになります。

于 2013-09-02T03:02:06.903 に答える