CAShapeLayer没有动画

时间:2014-10-27 00:55:40

标签: ios core-animation

我无法弄清楚如何让动画工作。我有一个叫做BallView的UIView。我可以画一个大的红色圆圈。我希望那个圆圈从红色变为绿色。我在视图的初始化程序中设置了CAShapeLayerCABasicAnimation,但动画无法正常工作。这是我的初始化程序:

- (void)initHelper:(UIColor*)c {    
  CAShapeLayer* sl = (CAShapeLayer*) self.layer;
  sl.fillColor = [UIColor redColor].CGColor;
  sl.path = [[UIBezierPath bezierPathWithOvalInRect:self.bounds] CGPath];

  CABasicAnimation *colorAnim = [CABasicAnimation animationWithKeyPath:@"fillColor"];
  colorAnim.duration = 5.0;
  colorAnim.fromValue = [UIColor redColor];
  colorAnim.toValue = [UIColor greenColor];
  colorAnim.repeatCount = 10;
  colorAnim.autoreverses = YES;
  [sl addAnimation:colorAnim forKey:@"fillColor"];
}

2 个答案:

答案 0 :(得分:2)

你的from和to值不对,你应该设置

 colorAnim.fromValue = (__bridge id)[UIColor redColor].CGColor;
 colorAnim.toValue = (__bridge id)[UIColor greenColor].CGColor;

答案 1 :(得分:0)

您不应该在init方法中放置动画,因为此时此视图正被添加到视图层次结构中。尝试将initHelper方法移出init方法并在BallView.h中公开它,这样你就可以在视图控制器中随时调用它,你可以在viewDidAppear方法中添加它。如果你不想这样做,你可以简单地延迟initHelper的开火时间:

[self performSelector:@selector(initHelper:) withObject:nil afterDelay:2.0];