Анимация UIView - Как отслеживать положение? - PullRequest
2 голосов
/ 30 марта 2012

я анимирую (перемещаю) подкласс UIImageView следующим образом:

[UIView beginAnimations:nil context:NULL];  
[UIView setAnimationDuration: 1];  
[UIView setAnimationDelay:0];
[UIView setAnimationCurve: UIViewAnimationCurveEaseOut];  
[UIView setAnimationBeginsFromCurrentState:YES]; 
if (position == 0) position = 1;
if (position > 6) position--;    
self.transform = CGAffineTransformMakeTranslation(position*120, 0);
[UIView commitAnimations];

тогда я хочу выделить его, пусть оно пульсирует:

CAKeyframeAnimation *bounce = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
CATransform3D forward = CATransform3DMakeScale(1.3, 1.3, 1);
CATransform3D back = CATransform3DMakeScale(0.7, 0.7, 1);
CATransform3D forward2 = CATransform3DMakeScale(1.2, 1.2, 1);
CATransform3D back2 = CATransform3DMakeScale(0.9, 0.9, 1);
[bounce setValues:[NSArray arrayWithObjects:
                   [NSValue valueWithCATransform3D:CATransform3DIdentity],
                   [NSValue valueWithCATransform3D:forward],
                   [NSValue valueWithCATransform3D:back],
                   [NSValue valueWithCATransform3D:forward2],
                   [NSValue valueWithCATransform3D:back2],
                   [NSValue valueWithCATransform3D:CATransform3DIdentity],
                   nil]];
[bounce setDuration:0.6];
[[super layer] addAnimation:bounce forKey:@"bounceanimation"];

Это все работает. Он перемещается на 120 пикселей, но при вызове пульсирующего кода он будет пульсировать в исходном положении, а не там, где я только что его переместил. почему и как я могу это изменить?

Tobias

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Хорошо, вот ваша проблема:

self.transform = CGAffineTransformMakeTranslation(position*120, 0);

Обратите внимание, что вы переводите представление в другое место, но, как и при любом преобразовании, исходная статистика объекта остается прежней.

Все, что вам нужно сделать, - это перевести этот код в метод setFrame: так, чтобы он фактически перемещал изображение.

0 голосов
/ 30 марта 2012

Не волнуйтесь!просто добавьте это

   bounce.fillMode = kCAFillModeForwards;

Это заставит вашу анимацию остаться в конечной точке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...