私は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に基づいて、各変換を絶対的にしたいと思います。私は変換を増分したくないです。
返信いただきありがとうございます。私はそれを試しましたが、うまくいきません。 UIViewクラスリファレンスから: "アニメーションが進行中でない場合、またはアニメーションブロックの外で呼び出された場合、このメソッドは何も行いません。" – beev
@beev、Alright。または、前のスライダーの値を保存し、スライダーを変更したときに前のスライダーの値と現在のスライダーの値の差を取得し、その差を使用して前の変換に対する新しい変換を計算します。たとえば、前のスライダの値が0.01で、現在のスライダの値が0.02の場合、その差は0.01です。したがって、4.0をtxに追加し、-10をtyに追加してください。 – EmptyStack
ありがとうございます。私はしばらくの間、これについて多くのバリエーションを試してきましたが、何も私はスライダを介してアニメーションの正確な制御を得ることができません。私はもっと一般的なやり方でそれを試してみることに決めました。 – beev