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,y 值为 -20。但是,我得到的是 15 度的汽车,x 值为 12,y 值为 -30。它将我的第二次转换应用于第一次转换后得到的值。

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

4

1 回答 1

1

看看能不能解决你的问题

[UIView setAnimationBeginsFromCurrentState:NO];

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

于 2011-06-18T08:33:59.857 回答