首页编程cakeyframeanimation,iOS动画CoreAnimation总结

cakeyframeanimation,iOS动画CoreAnimation总结

编程之家2023-11-05189次浏览

很多朋友对于cakeyframeanimation和iOS动画CoreAnimation总结不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

cakeyframeanimation,iOS动画CoreAnimation总结

多个caanimationdelegate,怎么区分

CAAnimation有很多派生类

CATransition提供渐变效果:(推拉push效果,消退fade效果,揭开reveal效果)。

CAAnimationGroup允许多个动画同时播放。

cakeyframeanimation,iOS动画CoreAnimation总结

CABasicAnimation提供了对单一动画的实现。

CAKeyframeAnimation关键桢动画,可以定义行动路线。

CAConstraint约束类,在布局管理器类中用它来设置属性。

cakeyframeanimation,iOS动画CoreAnimation总结

CAConstraintLayoutManager约束布局管理器,是用来将多个CALayer进行布局的.各个CALayer是通过名称来区分,而布局属性是通过CAConstraint来设置的。

CATransaction事务类,可以对多个layer的属性同时进行修改.它分隐式事务,和显式事务。

CAAnimation属性

delegate

@property(retain) id delegate

为CAAnimation设置代理。默认为nil。

注意:一个CAAnimation实例,不能设置delegate为self。会引起循环引用。

removedOnCompletion

@property(getter=isRemovedOnCompletion) BOOL removedOnCompletion

设置是否动画完成后,动画效果从设置的layer上移除。默认为YES。

iOS动画CoreAnimation总结

CoreAnimation翻译过来就是核心动画,一组非常强大的API,用来做动画的,非常的简单但是效果非常绚丽。

CoreAnimation类的继承关系图如下,其中CAMediaTiming是一个协议(protocol)

注意:

能用的动画类只剩下4个:CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup

2. timingFunction:控制动画运行的节奏。

animationWithKeyPath苹果官方介绍传送门

上文讲到可用的四个动画类:CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup。iOS9之后还有CASpringAnimation。先分别针对每个动画类写实例以进行加深。

关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是:

关键属性说明:

实例:

动画属性:

属性说明:

实例:

相关属性:

实例:

参考文章:

iOS CAAnimation核心动画

iOS动画之CAKeyframeAnimation

iOS出门必备之CoreAnimation(核心动画)

iOS动画-CAAnimation的说明与简单使用

1.CABasicAnimation

通过设定起始点,终点,时间,动画会沿着你这设定点进行移动。可以看做特殊的CAKeyFrameAnimation

2.CAKeyframeAnimation

Keyframe顾名思义就是关键点的frame,你可以通过设定CALayer的始点、中间关键点、终点的frame,时间,动画会沿你设定的轨迹进行移动

3.CAAnimationGroup

Group也就是组合的意思,就是把对这个Layer的所有动画都组合起来。PS:一个layer设定了很多动画,他们都会同时执行,

4.CATransition

这个就是苹果帮开发者封装好的一些动画,

values指明整个动画过程中的关键帧点

path与values属性一样,同样是用于指定整个动画所经过的路径的。需要注意的是,values与path是互斥的,当values与path同时指定时,path会覆盖values,即values属性将被忽略。

keyTimes是一个数组,用以指定每个子路径(AB,BC,CD)的时间。如果你没有显式地对keyTimes进行设置,则系统会默认每条子路径的时间为:ti=duration/(5-1),即每条子路径的duration相等,都为duration的1\4。当然,我们也可以传个数组让物体快慢结合。例如,你可以传入{0.0, 0.1,0.6,0.7,1.0},其中首尾必须分别是0和1,因此tAB=0.1-0, tCB=0.6-0.1, tDC=0.7-0.6, tED=1-0.7.....

timeFunctions这个属性用以指定时间函数,类似于运动的加速度,有以下几种类型。记住,这是一个数组,你有几个子路径就应该传入几个元素

/** Timing function names.**/

calculationMode该属性决定了物体在每个子路径下是跳着走还是匀速走,跟timeFunctions属性有点类似

ios gif 怎么在uiimageview上显示

直接上代码

-(void)createGIF{

UIImageView*imageView= [[UIImageView alloc] initWithFrame:CGRectMake(20, 100, 280, 200)];

[self.view addSubview:imageView];

//1.找到gif文件路径

NSString*dataPath= [[NSBundle mainBundle]pathForResource:@"11" ofType:@"gif"];

//2.获取gif文件数据

CGImageSourceRef source= CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:dataPath], NULL);

//3.获取gif文件中图片的个数

size_t count= CGImageSourceGetCount(source);

//4.定义一个变量记录gif播放一轮的时间

float allTime= 0;

//5.定义一个可变数组存放所有图片

NSMutableArray*imageArray= [[NSMutableArray alloc] init];

//6.定义一个可变数组存放每一帧播放的时间

NSMutableArray*timeArray= [[NSMutableArray alloc] init];

//7.每张图片的宽度

NSMutableArray*widthArray= [[NSMutableArray alloc] init];

//8.每张图片的高度

NSMutableArray*heightArray= [[NSMutableArray alloc] init];

//遍历gif

for(size_t i=0; i<count; i++){

CGImageRef image= CGImageSourceCreateImageAtIndex(source, i, NULL);

[imageArray addObject:(__bridge UIImage*)(image)];

CGImageRelease(image);

//获取图片信息

NSDictionary*info=(__bridge NSDictionary*)CGImageSourceCopyPropertiesAtIndex(source, i, NULL);

NSLog(@"info---%@",info);

//获取宽度

CGFloat width= [[info objectForKey:(__bridge NSString*)kCGImagePropertyPixelWidth] floatValue];

//获取高度

CGFloat height= [[info objectForKey:(__bridge NSString*)kCGImagePropertyPixelHeight] floatValue];

//

[widthArray addObject:[NSNumber numberWithFloat:width]];

[heightArray addObject:[NSNumber numberWithFloat:height]];

//统计时间

NSDictionary*timeDic= [info objectForKey:(__bridge NSString*)kCGImagePropertyGIFDictionary];

CGFloat time= [[timeDic objectForKey:(__bridge NSString*)kCGImagePropertyGIFDelayTime] floatValue];

[timeArray addObject:[NSNumber numberWithFloat:time]];

}

//添加帧动画

CAKeyframeAnimation*animation= [CAKeyframeAnimation animationWithKeyPath:@"contents"];

NSMutableArray*times= [[NSMutableArray alloc] init];

float currentTime= 0;

//设置每一帧的时间占比

for(int i=0; i<imageArray.count; i++){

[times addObject:[NSNumber numberWithFloat:currentTime/allTime]];

currentTime+=[timeArray[i] floatValue];

}

[animation setKeyTimes:times];

[animation setValues:imageArray];

[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];

//设置循环

animation.repeatCount= MAXFLOAT;

//设置播放总时长

animation.duration= allTime*MAXFLOAT;

//Layer层添加

[[imageView layer]addAnimation:animation forKey:@"gifAnimation"];

}

文章到此结束,希望我们对于cakeyframeanimation的问题能够给您带来一些启发和解决方案。如果您需要更多信息或者有其他问题,请随时联系我们。

android应用开发详解pdf,《Android应用开发攻略》pdf下载在线阅读,求百度网盘云资源宁波网页设计,宁波哪里有网页设计师的培训