防止CGAffineTransform逐步应用

时间:2011-06-18 08:31:07

标签: ios cocoa-touch uiimageview uislider cgaffinetransform

我正在使用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,y值为-20。然而,我得到的是15度的汽车,x值为12,y值为-30。它将我的第二个变换应用于第一次变换后到达的值。

如何将每个变换应用于我的汽车UIImageView的基本值?即我希望每个变换都是基于未转换的UIImageView的绝对变换。我不希望转换是增量的。

1 个答案:

答案 0 :(得分:1)

看看这是否解决了你的问题,

[UIView setAnimationBeginsFromCurrentState:NO];

另一种方式:
您可以保存上一个滑块值,当您更改滑块时,获取上一个和当前滑块值之间的差异,并使用该差异计算相对于上一个变换的新变换。例如,如果前一个滑块值为0.01且当前滑块值为0.02,则差值为0.01,因此向tx添加4.0并将-10添加到ty。