之二:CAKeyframeAnimation - 关键帧动画

是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值,就可以实现CALayer的某一属性按照一串的数值进行动画,就好像制作动画的时候一帧一帧的制作一样。

几个关键属性:

  • values:就是上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
  • path:设置一个CGPathRef\CGMutablePathRef的路径对象,默认nil,让CALayer跟着路径移动。path只对CALayer的anchorPoint(锚点)和position(位置)起作用。如果你设置了path,那么values将被忽略
  • keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的

说明:CABasicAnimation可看做是最多只有2个关键帧的CAKeyframeAnimation

- Values方式

 1 // 创建5个关键帧的点对象
 2 CGPoint p1 = CGPointMake(50, 120);
 3 CGPoint p2 = CGPointMake(80, 170);
 4 CGPoint p3 = CGPointMake(30, 100);
 5 CGPoint p4 = CGPointMake(100, 190);
 6 CGPoint p5 = CGPointMake(200, 10);
 7 
 8 // 将创建的关键帧放入数组中,用NSValue结构体类型转化成对象
 9 NSArray *values = [NSArray arrayWithObjects:[NSValue valueWithCGPoint:p1], [NSValue valueWithCGPoint:p2], [NSValue valueWithCGPoint:p3], [NSValue valueWithCGPoint:p4], [NSValue valueWithCGPoint:p5], nil];
10 
11 CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
12 
13 // 给Values属性赋值
14 [animation setValues:values];
15 
16 // 动画完成后保持最新状态
17 animation.removedOnCompletion = NO;
18 animation.fillMode = kCAFillModeForwards;
19 
20 animation.duration = 4.0;
21 
22 // 动画定时函数属性
23 animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
24 
25 animation.delegate=self;
26 
27 [self.myView.layer addAnimation:animation forKey:nil];
  • 第23行:timingFunction 用于变化起点和终点之间的插值计算,形象点说它决定了动画运行的节奏
  1. kCAMediaTimingFunctionLinear            线性,即匀速 
  2. kCAMediaTimingFunctionEaseIn            先慢后快 
  3. kCAMediaTimingFunctionEaseOut           先快后慢 
  4. kCAMediaTimingFunctionEaseInEaseOut     先慢后快再慢 
  5. kCAMediaTimingFunctionDefault           实际效果是动画中间比较快. 
  • 注意:当上面的预置不能满足你的需求的时候,你可以使用下面的两个方法来自定义你的timingFunction 

     *  + (id)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y; 

     *  - (id)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y; 

- Path方式:

 1 CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
 2 
 3 CGMutablePathRef myPath = CGPathCreateMutable();
 4 
 5 // 将路径的起点定位到(50, 120)  
 6 CGPathMoveToPoint(myPath, NULL, 50.0, 120.0);
 7 
 8 // 添加5条直线的路径到myPath中
 9 CGPathAddLineToPoint(myPath, NULL, 60, 130);
10 CGPathAddLineToPoint(myPath, NULL, 70, 140);
11 CGPathAddLineToPoint(myPath, NULL, 80, 150);
12 CGPathAddLineToPoint(myPath, NULL, 90, 160);
13 CGPathAddLineToPoint(myPath, NULL, 100, 170);
14 
15 // 添加4条曲线路径到myPath中
16 CGPathAddCurveToPoint(myPath,NULL,50.0,275.0,150.0,275.0,70.0,120.0);
17 CGPathAddCurveToPoint(myPath,NULL,150.0,275.0,250.0,275.0,90.0,120.0);
18 CGPathAddCurveToPoint(myPath,NULL,250.0,275.0,350.0,275.0,110.0,120.0);
19 CGPathAddCurveToPoint(myPath,NULL,350.0,275.0,450.0,275.0,130.0,120.0);
20 
21 //以"position"为关键字创建 实例
22 CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
23 
24 // 是否动画回到原位
25 [animation setAutoreverses:YES];
26 
27 // 设置path属性
28 animation.path = myPath;
29 
30 // 释放路径
31 CGPathRelease(myPath);
32 
33 animation.removedOnCompletion = NO;
34 animation.fillMode = kCAFillModeForwards;
35 
36 animation.duration = 4.0;
37 
38 animation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
39 
40 animation.delegate=self;
41 
42 [self.myView.layer addAnimation:animation forKey:nil];

 - 其他属性

  • calculationMode 这个属性用来设定 关键帧中间的值是怎么被计算的

转载于:https://www.cnblogs.com/xs514521/p/5198355.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
未来社区的建设背景和需求分析指出,随着智能经济、大数据、人工智能、物联网、区块链、云计算等技术的发展,社区服务正朝着数字化、智能化转型。社区服务渠道由分散向统一融合转变,服务内容由通用庞杂向个性化、服务导向转变。未来社区将构建数字化生态,实现数据在线、组织在线、服务在线、产品智能和决策智能,赋能企业创新,同时注重人才培养和科研平台建设。 规划设计方面,未来社区将基于居民需求,打造以服务为中心的社区管理模式。通过统一的服务平台和应用,实现服务内容的整合和优化,提供灵活多样的服务方式,如推送式、订阅式、热点式等。社区将构建数据与应用的良性循环,提高服务效率,同时注重生态优美、绿色低碳、社会和谐,以实现幸福民生和产业发展。 建设运营上,未来社区强调科学规划、以人为本,创新引领、重点突破,统筹推进、整体提升。通过实施院落+社团自治工程,转变政府职能,深化社区自治法制化、信息化,解决社区治理中的重点问题。目标是培养有活力的社会组织,提高社区居民参与度和满意度,实现社区治理服务的制度机制创新。 未来社区的数字化解决方案包括信息发布系统、服务系统和管理系统。信息发布系统涵盖公共服务类和社会化服务类信息,提供政策宣传、家政服务、健康医疗咨询等功能。服务系统功能需求包括办事指南、公共服务、社区工作参与互动等,旨在提高社区服务能力。管理系统功能需求则涉及院落管理、社团管理、社工队伍管理等,以实现社区治理的现代化。 最后,未来社区建设注重整合政府、社会组织、企业等多方资源,以提高社区服务的效率和质量。通过建立社区管理服务综合信息平台,提供社区公共服务、社区社会组织管理服务和社区便民服务,实现管理精简、高效、透明,服务快速、便捷。同时,通过培育和发展社区协会、社团等组织,激发社会化组织活力,为居民提供综合性的咨询和服务,促进社区的和谐发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值