Использование базовой анимации для анимации StrokeColor - PullRequest
3 голосов
/ 16 августа 2011

Я пытаюсь анимировать свойство CAShapeLayar's strokeColor. Я просмотрел документацию, и было заявлено, что это свойство, которое можно оживить. Код работает для анимации postion.y, но не для strokeColor. Я буду рад получить любую помощь или совет

Код, который я использовал:

lyr.fillColor = [[UIColor clearColor] CGColor];
lyr.lineWidth = 3.8;
lyr.strokeColor = [[UIColor yellowColor] CGColor];
lyr.position = CGPointMake(160, 431);
lyr.anchorPoint = CGPointMake(.5f, .5f);
[self.view.layer addSublayer:lyr];

CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"strokeColor"];
basicAnimation.fromValue = [lyr valueForKey:@"strokeColor"];



basicAnimation.toValue =[NSValue valueWithPointer:[[UIColor clearColor] CGColor]];


basicAnimation.duration = 2;
basicAnimation.repeatCount = 10;
basicAnimation.autoreverses = YES;
[lyr addAnimation:basicAnimation forKey:@"strokeColor"];

Спасибо заранее, Или.

Ответы [ 2 ]

6 голосов
/ 16 августа 2011

Это должно работать, как я только что проверил:

CABasicAnimation *strokeAnim = [CABasicAnimation animationWithKeyPath:@"strokeColor"]; // I changed the animation pointer name, but don't worry.
basicAnimation.toValue = (id) [UIColor clearColor].CGColor; // Just get rid of the fromValue line, and just cast the CGColorRef to an id.
basicAnimation.duration = 2;
basicAnimation.repeatCount = 10;
basicAnimation.autoreverses = YES;
[lyr addAnimation:strokeAnim forKey:@"flashStrokeColor"]; // I like to name this key differently, so as not create confusion.

Обратите внимание, что я удалил строку свойства fromValue из анимации, так как вы хотите получить то же значение, что и значение strokeColor перед анимацией (его излишним).Кроме того, я привел CGColorRef для stroColor к идентификатору, что и является свойством toValue.

3 голосов
/ 31 августа 2012

Важной ошибкой принятого кода ответа является то, что параметром forKey: метода addAnimation должно быть имя свойства, неявную анимацию которого вы хотите запретить запускать.Поскольку вы создаете явную анимацию с помощью CABasicAnimation, вам не нужно, чтобы неявная анимация и вновь созданная явная анимация мешали друг другу.Обратитесь к видео WWDC 2010 для Session 424 Core Animation - Core Animation на практике, часть 1 на 39-минутной отметке для подтверждения.

...