8.1 属性动画知识.pdf

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.1 属性动画 属性动画 CAAnimationDelegate在任何头⽂件中都找不到,但是可以在CAAnimation头⽂ 件或者苹果开发者⽂档中找到相关函数。在这个例 中,我们⽤- animationDidStop:finished:⽅法在动画结束之后来更新图层的 backgroundColor。 当更新属性的时候,我们需要设置⼀个新的事务,并且禁⽤图层⾏为。否则动画会发 ⽣两次,⼀个是因为显式的CABasicAnimation,另⼀次是因为隐式动画,具体实 现见订单8.3 。 清单8.3 动画完成之后修改图层的背景⾊ @implementation ViewController - ( oid) iewDidLoad { [super iewDidLoad]; //create sublayer self.colorLayer = [CALayer layer]; self.colorLayer.frame = CGRectMake(50.0f, 50.0f, 100.0f, 100.0 self.colorLayer.backgroundColor = [UIColor blueColor].CGColor; //add it to our iew [self.layerView .layer addSublayer:self.colorLayer]; } - (IBAction)changeColor { //create a new random color CGFloat red = arc4random() / (CGFloat)INT_MAX; CGFloat green = arc4random() / (CGFloat)INT_MAX; CGFloat blue = arc4random() / (CGFloat)INT_MAX; UIColor *color = [UIColor colorWithRed:red green:green blue:bl //create a basic animation CABasicAnimation *animation = [CABasicAnimation animation]; animation.keyPath = @backgroundColor; animation.toValue = (__bridge id)color.CGColor; animation.delegate = self; //apply animation to layer [self.colorLayer addAnimation:animation forKey :nil]; } - ( oid)animationDidStop:(CABasicAnimation *)anim finished:(BOOL)f { //set the backgroundColor property to match animation toValue [CATransaction begin]; [CATransaction setDisableActions:YES]; self.colorLayer.backgroundColor = (__bridge CGColorRef)anim.to [CATransaction commit]; } @end 对CAAnimation⽽⾔,使⽤委托模式⽽不是⼀个完成块会带来⼀个问题,就是当你 有多个动画的时候,⽆法在在回调⽅法中区分。在⼀个视图控制器中创建动画的时 候,通常会⽤控制器本⾝作为⼀个委托 (如清单8.3所⽰),但是所有的动画都会调⽤ 同⼀个回调⽅法,所以你就需要判断到底是那个图层的调⽤。 考虑⼀下第三章的闹钟,“ 图层⼏何学” ,我们通过简单地每秒更新指针的⾓度来实现 ⼀个钟,但如果指针动态地转向新的位置会更加真实。 我们不能通过隐式动画来实现因为这些指针都是UIView的实例,所以图层的隐式动 画都被禁⽤了。我们可以简单地通过UIView的动画⽅法来实现。但如果想更好地控 制动画时间,使⽤显式动画会更好 (更多内容见第⼗章)。使 ⽤CABasicAnimation来做动画可能会更加复杂,因为我们需要在- animationDidStop:finished:中检测指针

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档