Как переместить представление или метку в x направлении с помощью CABasicAnimation в iPhone
Я использую следующий код для перемещения метки из одной позиции в другую в направлении x
CABasicAnimation *theAnimation;
theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.translation.x"];
theAnimation.duration=1;
theAnimation.repeatCount=1;
theAnimation.autoreverses=NO;
theAnimation.fromValue=[NSNumber numberWithFloat:0];
theAnimation.toValue=[NSNumber numberWithFloat:80];
[lbl.layer addAnimation:theAnimation forKey:@"animateLayer"];
Но в этом случае в конце анимации метка возвращается в исходное положение. Как убедиться, что он остается в положении, в котором он перемещен.
Есть ли хороший способ сделать это без использования таймера и изменения координат самостоятельно.
Ответы
Ответ 1
После завершения анимации она удаляется. Вот почему он откидывается назад. Добавьте это в свою анимацию:
theAnimation.removedOnCompletion = NO;
theAnimation.fillMode = kCAFillModeForwards;
Это предотвратит удаление анимации и сообщает, что анимация останется в своем конечном состоянии после завершения.
Ответ 2
Здесь есть два элемента, которые необходимо обновить. Уровень презентации и модель. CABasicAnimation изменяет только уровень представления и никогда не обновляет модель. Поэтому, когда слой презентации из анимации заканчивается, он исчезает, и вы видите представление со значениями из модели. Вам просто нужно обновить модель с новым значением, когда анимация будет выполнена.
[layer setValue:toValue forKeyPath:keyPath];
взгляните на полезную утилиту, которую я написал, чтобы помочь именно с этим, HMBasicAnimation
http://hellomihai.wordpress.com/2014/09/02/hmbasicanimation-utility/
использование:
[HMBasicAnimation doAnimation:myView.layer // layer youre updating
toValue:myView.frame.size.width/2 // your value
duration:1.5 // duration
delaySeconds:1 // animation delay (good for chaining animations
keyPath:HMBasicAnimation_TRANSLATION_X]; // what you're changing, several available