2009-06-17 4 views
4

私はコアアニメーションを利用したLeopardのためのスクリーンセーバーを作りました。それは過度に複雑なことはしません。以下の構造におけるデータの「テーブル」を生成するCALayersとCATextLayersのツリーを使用する:スクリーンセーバーのジャッキー/かわいい(コア)アニメーション?

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

せいぜい一度に画面上に描画50のCALayersがあります。

"テーブル"を作成したら、CABasicAnimationを使用してビューに「サブコンテナ」をアニメーション化して追加します。繰り返しますが、私は何も気にしません - ちょうど単純なフェードインです。

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

スクリーンセーバーが対象としているppc mac-miniでは悪化します。アニメーションの再生(0%不透明度)から途中(50%)までの一般的な「トゥイーン」のアニメーション再生も拒否します。

私はObjectiveCが新しく、ガベージコレクション環境の使用経験がありますが、スクリーンセーバーがこのような問題を引き起こすほどのメモリが漏れているとは思いません。

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

スクリーンセーバーでCAを使用したり、一般的にはCAを使用することに関する情報はかなり薄いですが、プロファイリング/面倒なスクリーンセーバーに関するアドバイス/チュートリアルは存在しないようです。コミュニティが提供できるあらゆる援助は、大歓迎です!暗黙のアニメーションが少しスムーズに物事を助けるかのよう

--- --- UPDATE

は思えます。それでも私のソリューションと同じように明示的なアニメーションですべてをアニメーション化しようとするほど悪くはありません。

答えて

1

スクリーンセーバーはあまり特別ではありません。私はあなたがCore Animation Programming Guideで始まったと思いますか?インストゥルメントを使用して実行すると、時間がかかり過ぎる場所に関する多くの情報が得られます。

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

CoreAnimationでのあなたの仕事の大半は、途方に暮れています。私は一般的にそれが何をしているのかを知っており、ほとんどの問題はそれをあまりにも多く伝えることにそれを推測することから来ています。

関連する問題