1

Apple の ImageBrowserViewAppearance サンプル コード (ここにあります: http://developer.apple.com/library/mac/#samplecode/ImageBrowserViewAppearance/Introduction/Intro.html ) にあるものと同様の手法を実装しようとしています。 CALayer は、IKImageBrowserView 内の項目の上に生成され、画像ブラウザー内のオブジェクトの外観をカスタマイズします。

しかし、ガベージ コレクションをオンにすると奇妙な問題が発生し、Apple サンプル コードで再現できます。ターゲットでガベージ コレクションをオンにし、ImageBrowserAppearance サンプル アプリをビルドして起動するだけです。次に、[写真を追加...] ボタンを使用して画像ブラウザに写真を追加します。

ここで、IKImageBrowserView の空の部分をクリックし、クリック アンド ドラッグして、ブラウザー ビューで複数の項目の選択を開始します。選択ボックスをドラッグすると、一部の項目のピンと光沢のオーバーレイがちらつき、IKImageBrowserView の左下隅に一時的に表示されることがあります。すべての CALayer は時折これを行うようです。白い周囲のスライド エリアが左下隅にちらつきます。

この手法を自分のコードで模倣すると、(驚くことではありませんが) このバッジのちらつきも再現できます。ただし、ガベージ コレクションをオフにすると、この問題はなくなります。

ここで何がうまくいかないのか、誰にも手がかりがありますか? この手法と組み合わせてアプリでガベージ コレクションを使用したいのですが、ちらつきが気になります。

4

2 に答える 2

1

しばらく前にこれをブックマークしましたが、AppleがURLとテキストを変更しました。幸い、ブックマークしたときに引用しました:

Core Graphics API(Quartz 2D)では、ガベージコレクションを使用するようにコンパイルされたアプリケーションの描画パフォーマンスが約25%低下します。

その「描画パフォーマンスの25%の低下」テキストは、「コード実行のわずかなオーバーヘッド」に書き直されましたこれは10.5の場合です。おそらくAppleはそれを10.6に修正した。そして、あなたはCore Graphicsではなく、CoreAnimationについて話しているのです。

それでも、CoreAnimationは最終的にCoreGraphicsと通信する必要があり、おそらくそのパフォーマンスの問題は解消されておらず、あなたはそれに噛まれています。

于 2010-09-22T04:35:14.827 に答える
0

私はこれを少しいじり、GC をオンにしてプロジェクトを実行しても同じ動作をすることを確認できました。実際、十分に忍耐強く、矢印キーを使用して一度に 1 つの画像をゆっくりと選択を変更すると、最終的に動作がトリガーされ、ビュー内の 1 つの画像のレイヤーが左下隅に表示されることがわかります。画像の上ではなく。いつ発生するか、またはどの画像が選択されているか、どの画像のレイヤーが欠落しているかの関係について、どのようなパターンも見つけることができませんでした。なんらかの理由で、これらのレイヤーのフレームの原点が {0, 0} に設定されていると思いますが、その理由がわかればわかります。

于 2010-09-22T06:10:54.770 に答える