1

CGAffineTransformRotateとCGAffineTransformTranslateを使用して、画面全体の車の画像(UIImageView)の進行状況をアニメーション化します。アニメーションはUISliderによって制御されるため、ユーザーがスライダーを進めると、車が進み、角を曲がります。UISliderの各ポイントについて、車のCGAffineTransformRotateプロパティとCGAffineTransformTranslateプロパティの絶対値を設定できる必要があります。

ただし、変換が呼び出されるたびに、車の画像は段階的に変換されます。したがって、たとえば、スライダーポイント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の場合、車を10度にし、x値を8、ay値を-20にします。しかし、私が得ているのは、x値が12、ay値が-30の15度の車です。これは、最初の変換後に到達した値に2番目の変換を適用しています。

車のUIImageViewの基本値に各変換を適用するにはどうすればよいですか?つまり、変換されていないUIImageViewに基づいて、各変換を絶対的にする必要があります。変換をインクリメンタルにしたくありません。

4

1 に答える 1

1

これで問題が解決するかどうかを確認してください。

[UIView setAnimationBeginsFromCurrentState:NO];

別の方法:
前のスライダー値を保存し、スライダーを変更するときに、前のスライダー値と現在のスライダー値の差を取得し、その差を使用して、前の変換に対する新しい変換を計算できます。たとえば、前のスライダーの値が0.01で、現在のスライダーの値が0.02の場合、差は0.01なので、txに4.0を追加し、tyに-10を追加します。

于 2011-06-18T08:33:59.857 に答える