7

非常に複雑なプロジェクトを継承したため (そのため、内部の仕組みをすべて把握しているわけではありません)、バグが発生しています。私のアプリの特定の部分には、CATransaction で実行された長いアニメーションがいくつかあり、アニメーションがアクティブな間、layoutSubviews が繰り返し呼び出されているようです。これは ios5 では発生せず、すべてが正しいように見えますが、ios6 ではノンストップと呼ばれ、ビューのレイアウトの多くに干渉します。スタック トレースはすべて非表示/グレー表示になっていますが、最初はCA::Transaction::commit()

iOS のバージョン間で CATransaction が変更され、このようなことが発生しましたか?

4

2 に答える 2

2

この投稿を参照してください: UIView/CALayer: Transform はスーパービューで layoutSubviews をトリガーします

AppleはTSI経由で私に答えました:

なぜこの動作が見られるのですか? これは矛盾していますか、それともいくつかのコアコンセプトを誤解していますか?

ビューがそのサブビューのフレームを再計算する必要がある何かが変更されたとシステムが感じたときはいつでも、ビューにレイアウトのフラグが立てられます。これは、予想よりも頻繁に発生する可能性があり、まさにシステムがレイア​​ウトを必要とするビューにフラグを立てることを選択したときに発生します。これは実装の詳細です。

ビュー階層を上にカスケードするのはなぜですか?

一般に、ビュー (またはレイヤー) のジオメトリ プロパティを変更すると、ビュー階層の上方にレイアウトの無効化が連鎖的に発生します。これは、親ビューが、変更された子を含む自動レイアウト制約を持っている可能性があるためです。自動レイアウトは、明示的に有効にしているかどうかに関係なく、何らかの形でアクティブになっていることに注意してください。

変換を変更するたびにスーパービューをレイアウトサブビューにしないようにするにはどうすればよいですか?

この動作を回避する方法はありません。これは、ビュー階層の一貫性を保つために必要な UIKit の内部簿記の一部です。

于 2014-07-14T09:16:53.097 に答える