2009-03-01 5 views
4

私は最初のiPhoneアプリケーションを開発しています。私はそれを「機械」よりも先に作っています。今度は、&仕上げの詳細をラッピングしています。シンプルアニメーションのスムーズさを改善する

設定ペインの画面の下からスライドするビューがあります。ビュー自体には不透明度0があり、その内部にはUIImageViewビューがあり、PNGはコントロールの背後にあるビューの実際の背景を作成します。私はUIViewのための組み込みのアニメーション呼び出しを使用しています。

[self.view addSubview:settingsViewController.view]; 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

frame.origin.y = 200.0; 
settingsViewController.view.frame = frame; 

[UIView commitAnimations]; 

残念ながら、デバイスのアニメーションは不安定です。私の背景として使用しているPNGは、その幅の最上位30ピクセルだけで透明です。透過性のないPNGを使用すると、アニメーションはスムーズです。

アプリケーション自体は非常にグラフィカルなので、ビューは他のPNGでいっぱいの画面の上にアニメーション表示されます。

デバイスがこのタイプのアニメーションをスムーズに処理できない場合、私は私のアプローチを改良する必要があると私に信じさせてくれます。私がこれまでに持っていた考えは、

Core Animationを直接使用する必要がありますか?アニメーション化する前に設定ペインの後ろにビューをキャッシュすると、何とか効果がありますか?

これは私にとって新しい領域であり、最適な方法があるとわかっています。それは良い方法と考えられています。御時間ありがとうございます!

答えて

2

Core Animationを "直接"使用するか中心のプロパティをアニメーション化するかは関係ありません。グラフィックスハードウェアはアニメーションのすべてのフレームで透明イメージを背景と合成する必要があります。完全に不透明なPNGを使用すると、アニメーションが円滑になります。

このアプリをインストゥルメントの下で実行すると、コアアニメーションツールにリアルタイムで合成された領域を強調表示するチェックボックスが表示され、図面を再作成するヒントが表示される場合があります。

トップ30ピクセルだけを透明にする必要がある場合は、背景を2つのビュー、つまり上部(透明)に30ピクセル、残り(不透明)に分割する価値があります。フレームごとにビュー全体を合成している場合、その変更は、最上部の30ピクセルだけを合成すればよいことを知らせるのに十分かもしれません。

+0

もちろん、私は透明度と不透明な画像を合成する際のプロセッサオーバーヘッドの違いについて認識しています。イメージの分割についての良い提案。私はそれを見てみましょう。現実は、私はちょうど過度に厄介であるかもしれません。インストゥルメントはすべてがスムーズに動いていると言いますが、私の目は不一致です。 –

+0

インストゥルメントはアニメーションがスムーズであるかどうかを伝えるつもりはありません。それが何をしているのかは、グラフィックスが合成されている場合は赤で、描画されている場合は緑で強調表示されます。それを使用して、必要以上に合成されているかどうかを確認します。 – benzado

+0

view.layer.shouldRasterize = YES; – jjxtra

1

これまでフレームをアニメーション化する際に問題がありましたが、代わりにcenterプロパティをアニメーション化してみてください。

また、背景画像に透明度が必要なのは何ですか?その画像を含むビューの背景としてその画像を使用し、UIImageViewの必要性を排除することはできませんか?

+0

ご返信ありがとうございます。私はイメージを直接描くことができないことを知りませんでした。だから私はいくつかの簡単な読書を行い、私の設定ウィンドウUIViewのdrawRectをオーバーロードしました。それは動作します。私は透明性についてのあなたの意味を理解していませんが、不透明度を0に設定しなければ、PNGは堅実なバックグラウンドで描画されます。 –

+0

わかりやすくするために、私はIBの透明度を設定しています。 –

+0

drawRectをオーバーライドする必要はありません。myView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@ "mybg.png"]]; 透明性について知りたいのは、ソリッドカラーではなく、背後に表示する必要があることです。 – nduplessis