关键帧动画CAKeyframeAnimation
来源:互联网 发布:暴躁的母亲知乎 编辑:程序博客网 时间:2024/05/16 16:14
之所以叫做关键帧动画是因为,这个类可以实现,某一属性按照一串的数值进行动画,就好像制作动画的时候一帧一帧的制作一样。
一般使用的时候
CAKeyframeAnimation 的一些比较重要的属性
1. path
这是一个 CGPathRef
2. values
一个数组,提供了一组关键帧的值,
下面是一个简单的例子
CGMutablePathRef path = CGPathCreateMutable();
//将路径的起点定位到 (50 120)
CGPathMoveToPoint(path,NULL,50.0,120.0);
//下面5行添加5条直线的路径到path中
CGPathAddLineToPoint(path,NULL, 60, 130);
CGPathAddLineToPoint(path,NULL, 70, 140);
CGPathAddLineToPoint(path,NULL, 80, 150);
CGPathAddLineToPoint(path,NULL, 90, 160);
CGPathAddLineToPoint(path,NULL, 100, 170);
//下面四行添加四条曲线路径到path
CGPathAddCurveToPoint(path,NULL,50.0,275.0,150.0,275.0,70.0,120.0);
CGPathAddCurveToPoint(path,NULL,150.0,275.0,250.0,275.0,90.0,120.0);
CGPathAddCurveToPoint(path,NULL,250.0,275.0,350.0,275.0,110.0,120.0);
CGPathAddCurveToPoint(path,NULL,350.0,275.0,450.0,275.0,130.0,120.0);
//以“position”为关键字创建 实例
CAKeyframeAnimation*animation = [CAKeyframeAnimationanimationWithKeyPath:
@"position"
];
//设置path属性
[animationsetPath:path];
[animationsetDuration:3.0];
//这句代码表示 是否动画回到原位
//[animation setAutoreverses:YES];
CFRelease(path);
[self.block.layeraddAnimation:animation forKey:NULL];
下面一个例子是利用values制作的动画
CGPoint p1=CGPointMake(50, 120);
CGPointp2=CGPointMake(80, 170);
CGPointp3=CGPointMake(30, 100);
CGPointp4=CGPointMake(100, 190);
CGPointp5=CGPointMake(200, 10);
NSArray*values=[NSArray arrayWithObjects:[NSValuevalueWithCGPoint:p1],[NSValue valueWithCGPoint:p2],[NSValuevalueWithCGPoint:p3],[NSValue valueWithCGPoint:p4],[NSValuevalueWithCGPoint:p5], nil];
CAKeyframeAnimation
*animation= [CAKeyframeAnimation animationWithKeyPath:
@"position"
];[animation setValues:values];
[animationsetDuration:3.0];
[animationsetAutoreverses:YES];
[self.block.layeraddAnimation:animation forKey:NULL];
设定每一帧的时间
默认情况下,一帧动画的播放,分割的时间是动画的总时间除以帧数减去一。你可以通过下面的公式决定每帧动画的时间:总时间/(总帧数-1)。 例如,如果你指定了一个 5帧,10 秒的动画,那么每帧的时间就是 2.5 秒钟:10/(5-1)=2.5。你可以做更多 的控制通过使用 keyTimes关键字,你可以给每帧动画指定总时间之内的某个时间点。
通过设置属性keyTimes,能实现这个功能,这个属性是一个数组,其成员必须是NSNumber。
同时 这个属性的设定值要与calculationMode属性相结合,同时他们有一定的规则,
The appropriate values in the keyTimes
calculationMode
Ifthe
calculationMode isset to ,the first value in the array must be 0.0 and the last value must be1.0. Values are interpolated between the specified key times.kCAAnimationLinear
Ifthe
calculationMode isset to ,the first value in the array must be 0.0.kCAAnimationDiscrete
Ifthe
calculationMode isset to kCAAnimationPaced
or kCAAnimationCubicPaced
,thekeyTimes
arrayis ignored。
如果keyTimes的值不合法,或者不符合上面的规则,那么就会被忽略。
[animation setCalculationMode:kCAAnimationLinear]; [animationsetKeyTimes:
[NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0],
[NSNumber numberWithFloat:0.25], [NSNumbernumberWithFloat:0.50],
[NSNumber numberWithFloat:0.75], [NSNumber numberWithFloat:1.0],nil]];
calculationMode
这个属性用来设定 关键帧中间的值是怎么被计算的
可选的值有
NSString * const kCAAnimationLinear;NSString * const kCAAnimationDiscrete; 只展示关键帧的状态,没有中间过程,没有动画。NSString * const kCAAnimationPaced;NSString * const kCAAnimationCubic;NSString * const kCAAnimationCubicPaced;
关键帧动画的基础步骤
1.决定你想要做动画的属性(例如,框架,背景,锚点,位置,边框,等等)2.在动画对象值的区域中,指定开始,结束,和中间的值。这些都是你的关键帧(看清单 4-2)
3.使用 duration 这个字段指定动画的时间
4.通常来讲,通过使用 times 这个字段,来给每帧动画指定一个时间。如果你没有指定这些,核心动画就
会通过你在 values这个字段指定的值分割出时间段。
5.通常,指定时间功能来控制步调。 这些都是你需要做的。你创建你的动画和增加他们到层中。调用-addAnimation就开始了动画。
原文转自:http://www.cnblogs.com/bucengyongyou/archive/2013/01/02/2842065.html
- 关键帧动画CAKeyframeAnimation
- 关键帧动画CAKeyframeAnimation
- 关键帧动画CAKeyframeAnimation
- 关键帧动画CAKeyframeAnimation
- 关键帧动画CAKeyframeAnimation
- 关键帧动画CAKeyframeAnimation
- 关键帧动画CAKeyframeAnimation
- 关键帧动画CAKeyframeAnimation
- CAKeyframeAnimation ---关键帧动画
- 关键帧动画CAKeyframeAnimation
- CAKeyFrameAnimation关键帧动画
- 关键帧动画CAKeyframeAnimation
- 关键帧动画CAKeyframeAnimation
- CAKeyframeAnimation 关键帧动画
- 关键帧动画CAKeyframeAnimation
- 关键帧动画CAKeyframeAnimation
- 关键帧动画CAKeyframeAnimation
- 关键帧动画CAKeyframeAnimation
- 有关图像标签的一些知识
- IOS 7 Xcode 5 免IDP证书 真机调试
- SDWebImage使用——一个可管理远程图…
- 如何判断当前网络的运营商
- GCD的使用(详解)
- 关键帧动画CAKeyframeAnimation
- iOS技巧之获取本机通讯录中的内容…
- ios视频
- 使用Cocoapods下载DKNightVersion运行时路径错误
- Block的Retain Cycle的解决方法
- UIImageJPEGRepresentation和UIIma…
- 调用已经废弃的API消除警告
- Python GUI - Tkinter LabelFrame
- iOS关于extern、static、const的区…