основная анимация iPhone - анимировать NSBezierPath - PullRequest
3 голосов
/ 01 ноября 2011

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

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

1 Ответ

3 голосов
/ 01 ноября 2011

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

Тогда свойство пути 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];
...