0

ADBannerView自動レイアウトを使用して、オン画面とオフ画面をアニメーション化しようとしています。事前自動レイアウト(フレームの設定とアニメーション化)はすべて正常に機能しました。これで次のコードがviewDidLoad表示され、画面外にある場合に広告バナーを確認するために実行されます。

[UIView animateWithDuration:kADAnimationDuration
                 animations:^{
                     _addBannerDistanceFromBottomConstraint.constant = 32;
                     [self.view layoutIfNeeded];    
}];

このコードは機能しますが、遅いです。layoutIfNeeded(比較的)時間がかかり、パフォーマンスが低下します。線を削除すると、すべてが素晴らしく高速になりますが、アニメーションは機能しません。

問題は...なぜこれがとても遅いのですか/どうすればスピードアップできますか?

編集:私のUIはかなり重要で、すべてをレイアウトすることが原因かもしれないと思ったので、シンプルなバナーを作成しUIViewてそこにバナーを配置してみました。その後、1つのアイテムを含むだけでそれsubviewを呼び出す必要がありました。ただし、パフォーマンスに変化はありません。layoutIfNeededsubview

4

2 に答える 2

3

ADBannerView私は他に何も持たないアプリを作成しました。同じ問題が存在します。私はバグとしてAppleに提出し、「重複」したので、それは既知の問題だと思います。

回避策として、広告バナーを画面から外し、有効な広告を取得したときにのみ画面上を移動します。ストーリーボードで作業するのは少し面倒ですが、ユーザーは違いに気付かず、速度低下を防ぎます。

編集:私は自動レイアウトでより多くの作業をしてきましたが、残念なことに、マット・ノイブルクと共有しているようです。彼は「 iOSでの自動レイアウトが遅い」というタイトルを少し書いた。

残念ですが、iOSでは自動レイアウトが遅いです。

これは、アプリの1つを自動レイアウトに変換する際に発生したいくつかの問題をほぼまとめたものです。パフォーマンスは単にそこにありません。Mattが彼の投稿で示した例では、同じタスクを実行するのに5倍の時間がかかる自動レイアウトがあります。

今のところ、自動レイアウトが役立つほど複雑なものについては、自動レイアウトを避けていると思います。

編集: iOS 8ベータ版であり、制約が大幅に高速化されています。特に古いデバイスで多く(50+)を使用する場合はまだありますが、これまでのテストから、以前の2秒の遅延は約0.4秒に短縮されました。この変更により、制約が十分に高速化され、一部の制約の重いビュー作業で実行できるようになった可能性があります。

于 2013-01-03T16:21:00.743 に答える
1

1つの問題は、ビューパラメータがまだ設定されていないviewDidLoadでこれを行うことである可能性がありますが、なぜそれが遅くなるのかわかりません。代わりに、viewDidAppearで試してみてください。また、WWDC 2012の自動レイアウトセッションで見たものによると、アニメーションブロックの内側ではなく、外側に制約を追加する(または実行中に定数を変更する)必要があります。アニメーションブロックの上に移動してみてください。

于 2012-12-31T04:31:51.720 に答える