2011-06-18 30 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,我想車是在10度,x值爲8,y值爲-20。然而,我得到的是15度的車,x值爲12,y值爲-30。它將我的第二個變換應用於第一次變換後到達的值。

如何將每個轉換應用到我的車的UIImageView的基本值?即我希望每個轉換是絕對的基於未轉換的UIImageView。我不希望轉換是增量式的。

回答

1

看看這個解決您的問題,

[UIView setAnimationBeginsFromCurrentState:NO]; 

另一種方式:
您可以保存前滑值,當您更改滑塊,得到了以前和當前滑塊值之間的差異,並使用該差異計算相對於之前變換的新變換。例如,如果上一個滑塊值爲0.01,當前滑塊值爲0.02,則差值爲0.01,因此將tx添加到4.0並將-10加到ty。

+0

感謝您的回覆。我嘗試過,但不起作用。從UIView類引用:「如果動畫未在進行或在動畫塊之外調用,則此方法不執行任何操作。」 – beev

+0

@beev,好的。或者,您可以保存上一個滑塊值,並在更改滑塊時,獲取之前和當前滑塊值之間的差異,並使用該差異計算相對於上一個變換的新變換。例如,如果上一個滑塊值爲0.01,當前滑塊值爲0.02,則差異爲0.01,因此將tx添加到4.0並將-10添加到ty – EmptyStack

+0

感謝您的幫助。一段時間以來,我一直在嘗試很多變體,但沒有任何東西讓我通過滑塊精確控制動畫。我決定嘗試用更傳統的方式來解決這個問題。 – beev