1

戻るボタンをタップすると、ビューの 1 つが数秒間フリーズします。

さらに、このビューで項目の 1 つをタップすると、ポップアップが表示されます (カスタムではなく、UIPopoverController)。このポップアップは非常に高速に表示されますが、ポップアップを「裏返して」裏側を見ると、同じ長い遅延が発生します。

その理由は、ビューの複雑さと関係があると思います。以下のスクリーンショットでわかるように、これはコレクション ビューであり、背景があり、一部のサブビューが回転しています ( UIViewEdgeAntialiasingがオンになっています)。

テキストを隠す白いバーはアプリの一部ではありません

Instruments の Time Profiler を使用して何が起こっているのかを調べましたが、行き詰まりました。

選択した期間は、戻るボタンを押してフリーズが発生したときです

「Hide System Libraries」の選択を解除しない限り、有用なものは何も表示されません。

システム ライブラリを含める

メソッド名を見ると、自動レイアウトに関係していると思います。これは、セグエ中に何かをレンダリングしようとしていることを示唆しています。ただし、 などのメソッドcellForItemAtIndexPathは呼び出されません。

この問題がまったく発生しないこのアプリの iPhone バージョンもあります。コレクションビューの代わりにテーブルビューを使用します。また、背景と回転した写真もあります。

シミュレーターを使用してこれらの測定を行いました。私の iPad Mini では状況はさらに悪い。アニメーションが始まるまでに最大 20 秒かかる場合があります。

更新 - あなたの答えのおかげで私が試したこと:

  • オフUIViewEdgeAntialiasing: パフォーマンスへの影響なし
4

2 に答える 2

0

これは、UIViewEdgeAntialiasing フラグが原因である可能性があると思います。あなたのメイン ビュー (わずかに回転した写真がたくさんあるビュー) には、アンチエイリアス処理されたエッジがたくさんあるため、iPad の GPU に非常に負担がかかっているようです。ポップオーバーが回転しているとき (つまり、背景が再び表示されているとき) に描画パフォーマンスが低下するという事実は、これにある程度の信憑性を与えます。

オフにして、パフォーマンスが向上するかどうかを確認してください。どんな風に見えますか?

于 2013-01-29T05:37:12.133 に答える
0

ここではローテーションが悪者でした。それぞれUICollectionViewCellに がUIViewコンテナ ビューとしてあり、その中に がありUIImageViewます。私はこのように回転させます:

container.transform = CGAffineTransformMakeRotation(M_PI * someRandomFloat);

その行を削除すると、すべてがきびきびとなります。

私は iPhone でも同じ手法を使用していますが、この種の回転によるパフォーマンスへの影響は .NETUITableViewCellよりも少ないようUICollectionViewCellです。

UICollectionViewFlowLayout1つのサブビューではなく、セル自体を回転させるサブクラス化を試みました。残念ながら、これにより同様のパフォーマンスの問題が発生します。

于 2013-01-29T06:30:22.083 に答える