Подтвердить что ты не робот

Как переместить представление или метку в 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"];

Но в этом случае в конце анимации метка возвращается в исходное положение. Как убедиться, что он остается в положении, в котором он перемещен.

Есть ли хороший способ сделать это без использования таймера и изменения координат самостоятельно.

4b9b3361

Ответ 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