首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAShapeLayer非动画

CAShapeLayer非动画
EN

Stack Overflow用户
提问于 2014-10-27 00:55:39
回答 2查看 179关注 0票数 0

我很难弄清楚如何让动画工作。我有一个叫UIView的BallView。我可以画一个很大的红色圆圈。我要那个圆圈从红色变成绿色。我在视图的初始化器中设置了一个CAShapeLayerCABasicAnimation,但是动画不起作用。这是我的初始化器:

代码语言:javascript
复制
- (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"];
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-27 01:19:15

您的from和to值都不正确,您应该设置

代码语言:javascript
复制
 colorAnim.fromValue = (__bridge id)[UIColor redColor].CGColor;
 colorAnim.toValue = (__bridge id)[UIColor greenColor].CGColor;
票数 2
EN

Stack Overflow用户

发布于 2014-10-27 02:35:24

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

代码语言:javascript
复制
[self performSelector:@selector(initHelper:) withObject:nil afterDelay:2.0];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26579751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档