2011-06-18 4 views
1

私はCGAffineTransformRotateとCGAffineTransformTranslateを使用して、画面全体の車画像(UIImageView)の進行をアニメーション化しています。アニメーションはUISliderによって制御されるので、ユーザーがスライダを前進させると、車は前進して角を回ります。 UISliderの各点については、車のCGAffineTransformRotateプロパティとCGAffineTransformTranslateプロパティの絶対値を設定できる必要があります。CGAffineTransformが段階的に適用されないようにする

ただし、トランスフォームが呼び出されるたびに、車の画像が段階的に変換されています。したがって、たとえば、私はスライダーポイント0.01でこれを使用し、場合:

carImage.transform = CGAffineTransformRotate(carImage.transform, degreesToRadians(5)); 
carImage.transform = CGAffineTransformTranslate(carImage.transform, 4.0, - 10.0); 

と、このスライダーポイント0.02で:

carImage.transform = CGAffineTransformRotate(carImage.transform, degreesToRadians(10)); 
carImage.transform = CGAffineTransformTranslate(carImage.transform, 8.0, - 20.0); 

スライダーの値が0.02であるとき、私はになるように車をしたいと思いますx値が8、y値が-20の10度。しかし、私が得ているのはx値が12でy値が-30の15度の車です。最初の変換の後に到着した値に2番目の変換を適用しています。

どのように私の車のUIImageViewの基本的な値に各変換を適用できますか?つまり、変換されていないUIImageViewに基づいて、各変換を絶対的にしたいと思います。私は変換を増分したくないです。

答えて

1

[UIView setAnimationBeginsFromCurrentState:NO]; 

、これはあなたの問題を解決するかどうかを確認してください別の方法:
あなたは、以前のスライダー値を保存することができ、あなたはスライダーを変更すると、以前と現在のスライダ値の差を取得しますその差を使用すると、前の変換に対する新しい変換が計算されます。たとえば、前のスライダの値が0.01で、現在のスライダの値が0.02の場合、その差は0.01なので、4.0をtxに追加し、-10をtyに追加します。

+0

返信いただきありがとうございます。私はそれを試しましたが、うまくいきません。 UIViewクラスリファレンスから: "アニメーションが進行中でない場合、またはアニメーションブロックの外で呼び出された場合、このメソッドは何も行いません。" – beev

+0

@beev、Alright。または、前のスライダーの値を保存し、スライダーを変更したときに前のスライダーの値と現在のスライダーの値の差を取得し、その差を使用して前の変換に対する新しい変換を計算します。たとえば、前のスライダの値が0.01で、現在のスライダの値が0.02の場合、その差は0.01です。したがって、4.0をtxに追加し、-10をtyに追加してください。 – EmptyStack

+0

ありがとうございます。私はしばらくの間、これについて多くのバリエーションを試してきましたが、何も私はスライダを介してアニメーションの正確な制御を得ることができません。私はもっ​​と一般的なやり方でそれを試してみることに決めました。 – beev

関連する問題