Анимация ядра iPhone — анимация NSBezierPath

#iphone #core-animation #nsbezierpath

#iPhone #ядро-анимация #nsbezierpath

Вопрос:

Я хочу анимировать рисование пути так, как он рисуется на экране, я предполагаю, что основная анимация — лучший способ с NSBezierPath помощью, однако я не уверен, как это реализовать.

По сути, идея состоит в том, чтобы путь из точки A в точку B медленно анимировался от A до B, пока путь не достигнет B. Хороший учебник о том, как это сделать, был бы отличным.

Ответ №1:

Вы можете создать CAShapeLayer с помощью вашего CGPath (например, может быть создан из UIBezierPath).

Тогда свойство path для CAShapeLayer само по себе является анимируемым, и вы также можете создавать более продвинутые анимации, используя анимируемые свойства strokeStart и strokeEnd (доступны начиная с iOS 4.2)

Простой пример того, как добавить слой со случайной строкой, которая появляется с анимацией:

 CAShapeLayer *l = [CAShapeLayer layer];
l.frame = self.view.bounds;
l.strokeColor = [UIColor redColor].CGColor;
CGPoint start = CGPointMake(arc4random()%300 10, arc4random()%400 40);
CGPoint end = CGPointMake(arc4random()%300 10, arc4random()%400 40);
UIBezierPath *path = [[UIBezierPath alloc] init];
[path moveToPoint:start];
[path addLineToPoint:end];
l.path = path.CGPath;
[path release];

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat:1.0f];
animation.duration = 3.0f;
[l addAnimation:animation forKey:@"myStroke"];
[self.view.layer addSublayer:l];
 

Комментарии:

1. Не могли бы вы предоставить пример кода о том, как этого добиться?