Animate CGContextStrokeEllipseInRect - PullRequest
       14

Animate CGContextStrokeEllipseInRect

0 голосов
/ 17 февраля 2009

Я пытаюсь оживить рисунок круга. Что-то приложение Shazaam делает во время записи, но намного проще.
У меня есть этот код в drawRect: метод рисования круга:

CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(currentContext, 0.86, 0.86, 0.86, 1.0);
CGContextSetLineWidth(currentContext, kLineWidth);
CGContextStrokeEllipseInRect(currentContext, CGRectMake(0.0, 0.0, 150.0, 150.0));

Я пытался оживить круг с помощью:

[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat: 3.0f] forKey: kCATransactionAnimationDuration];
// Drawing code above
[CATransaction commit];

Единственное, что он делает, это рисует круг, как указано, но он не анимирован.

Может кто-нибудь помочь мне с этим?

Ответы [ 3 ]

0 голосов
/ 18 февраля 2009

Ребята из Omni опубликовали способ анимации содержимого CALayer , который будет одним из способов достижения этой анимации. (Обычно Core Animation обрабатывает только изменение размера, положения, поворота или непрозрачности предварительно визуализированного слоя, а не его содержимого.) В их примере используется анимированная синусоида, но вы можете заменить это на рисунок дуги.

0 голосов
/ 19 февраля 2009

Кроме того, если вы просто создаете круговую «вращающуюся» анимацию, вы можете просто создать одно круглое изображение, линия которого «градиенты» от одного до нуля, и вращать его. Но звучит так, будто вы пытаетесь на самом деле оживить рисование линии, а не просто создать счетчик, поэтому предлагаемое Августом решение перерисовки по таймеру звучит как путь.

0 голосов
/ 18 февраля 2009

Вы не сможете анимировать рисование таким образом. Вместо этого вам придется проходить циклы (например, используя NSTimer) и постоянно перерисовывать.

Я не уверен, работает ли так Shazaam или нет.

Другая альтернатива - создать серию изображений и анимировать их в UIImageView.

...