4

コアアニメーションを利用する Leopard 用のスクリーンセーバーを作成しました。過度に複雑なことは何もしません。CALayers と CATextLayers のツリーを使用して、次の構造でデータの「テーブル」を生成します。

- root
  › maincontainer
    › subcontainer
      › row [multiple]
        › cell [multiple]
          › text layer

一度に画面に表示される CALayer は、最大で 50 個です。

「テーブル」を構築したら、CABasicAnimation を使用して「サブコンテナ」のアニメーションをビューに追加します。繰り返しますが、派手なことは何もしていません。単純なフェードインだけです。

問題は、アニメーションが発生している間は見るのが苦痛だということです。4GB の RAM を搭載した 3.06Ghz の iMac である私の開発マシンではぎこちなく、アニメーションが徐々に変化するのではなく、10 ステップに切り刻まれているようです。

スクリーンセーバーが対象としている ppc mac-mini ではさらに悪化します。アニメーションを再生することさえ拒否し、通常はアニメーションの最初 (不透明度 0%) から途中 (50%) まで「トゥイーン」してから完了します。

私は ObjectiveC に比較的慣れておらず、私の経験はガベージ コレクション環境の使用に基づいていますが、スクリーンセーバーがそのような問題を引き起こし始めた時点で十分なメモリ リークが発生しているとは信じられません。

また、ハードウェアの問題ではないと確信しています。コアアニメーションを使用する組み込みのスクリーンセーバーをテストし、比較のためにいくつかの無料の CA ベースのものをダウンロードしましたが、どちらのマシンでも問題なく動作します。

スクリーンセーバーでの CA の使用、または一般的な CA の使用に関する Google の情報はかなり少なく、スクリーンセーバーのプロファイリング/トラブルシューティングに関するアドバイス/チュートリアルは存在しないようです。したがって、コミュニティが提供できる支援は大歓迎です!

- - アップデート - -

暗黙のアニメーションが物事を少しスムーズにするのに役立つようです。まだ少しぎくしゃくしていますが、私のソリューションのように明示的なアニメーションですべてをアニメーション化しようとするほど悪くはありません。

4

1 に答える 1

1

スクリーンセーバーについて特別なことはあまりありません。Core Animation Programming Guideから始めたと思いますか? Instruments を介して実行すると、時間がかかりすぎている場所に関する多くの情報が得られます。

フェードインを行うために使用しているコードは役に立ちます。あなたが説明していることについては、CABasicAnimation さえ必要ありません。レイヤーのアニメーション化可能なプロパティを設定するだけで、デフォルトでアニメーション化されます。Implicit Animationsを読んだことを確認してください。そのページの残りの部分もおそらく役に立ちます。

CoreAnimation での作業のほとんどは、邪魔にならないようにすることです。私はそれが何をしているのかを大体知っていますが、ほとんどの問題は、それを推測しすぎることから生じます。

于 2009-06-18T23:43:45.187 に答える