Предотвращение постепенного применения CGAffineTransform - PullRequest
1 голос
/ 18 июня 2011

Я использую 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 и значением a -20.Однако, что я получаю, так это автомобиль под углом 15 градусов со значением x 12 и значением y -30.Он применяет мое второе преобразование к значениям, полученным после первого преобразования.

Как я могу применить каждое преобразование к базовым значениям UIImageView моего автомобиля?Т.е. я хочу, чтобы каждое преобразование было абсолютным на основе нетрансформированного UIImageView.Я не хочу, чтобы преобразования были инкрементальными.

1 Ответ

1 голос
/ 18 июня 2011

Посмотрите, решит ли это вашу проблему,

[UIView setAnimationBeginsFromCurrentState:NO];

Другой способ:
Вы можете сохранить предыдущее значение ползунка, а при смене ползунка получите разницу междупредыдущие и текущие значения ползунка, и, используя эту разницу, вычисляют новое преобразование относительно предыдущего преобразования.Например, если предыдущее значение ползунка равно 0,01, а текущее значение ползунка равно 0,02, разница составляет 0,01, поэтому добавьте 4,0 к tx и добавьте -10 к ty.

...