2011-06-18 31 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