iOS动画---1

/**

iOS动画主要是指CoreAnimation框架。CoreAnimation是iOS和macOS平台上负责图形渲染与动画的基础框架。CoreAnimation可以作用于动画视图或者其他可视元素,为你完成了动画所需的大部分绘帧工作。只需配置少量的动画参数,如开始点的位置和结束点的位置即可使用CoreAnimation的动画效果。CoreAnimation将大部分实际的绘图任务交给了图形硬件来处理,图形硬件会加速图形渲染的速度。这种自动化的图形加速技术让动画拥有更高的帧率并且显示效果更加平滑,不会加重CPU的负担而影响程序的运行速度。

----------------------------------------------------

常用属性

duration : 动画的持续时间

beginTime : 动画的开始时间

repeatCount : 动画的重复次数

autoreverses : 执行的动画按照原动画返回执行

timingFunction : 控制动画的显示节奏系统提供五种值选择,分别是:

kCAMediaTimingFunctionLinear 线性动画

kCAMediaTimingFunctionEaseIn 先快后慢

kCAMediaTimingFunctionEaseOut 先慢后快

kCAMediaTimingFunctionEaseInEaseOut 先慢后快再慢

kCAMediaTimingFunctionDefault 默认,也属于中间比较快

delegate : 动画代理。能够检测动画的执行和结束。

------------------------------------------

@interface NSObject (CAAnimationDelegate)

- (void)animationDidStart:(CAAnimation *)anim;

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

@end

path:关键帧动画中的执行路径

type:过渡动画的动画类型,系统提供了四种过渡动画。

kCATransitionFade 渐变效果

kCATransitionMoveIn 进入覆盖效果

kCATransitionPush 推出效果

kCATransitionReveal 揭露离开效果

subtype : 过渡动画的动画方向

kCATransitionFromRight 从右侧进入

kCATransitionFromLeft 从左侧进入

kCATransitionFromTop 从顶部进入

kCATransitionFromBottom 从底部进入

*/

- (void)initAnimation{

/*iOS动画的调用方式*/

/*------1-----------UIView代码块调用---------------------------*/

//    UIView* animationView = [[UIView alloc]init];

//    [self.view addSubview:animationView];

//    animationView.backgroundColor = [UIColor yellowColor];

//    animationView.frame = CGRectMake(0, screenWidth/2-50, 50, 50);//动画起始位置

//    [UIView animateWithDuration:5 animations:^{

//        animationView.frame = CGRectMake(screenWidth-50, screenWidth/2-25, 50, 50);//动画结束位置

//

//    } completion:^(BOOL finished) {

//        animationView.frame = CGRectMake(screenWidth/2-50, screenWidth/2-25, 50, 50);//动画完成之后

//

//    }];

//

/*-------2----------UIView  [begin commit]模式---------------------------*/

//    UIView* animationView = [[UIView alloc]init];

//    [self.view addSubview:animationView];

//    animationView.backgroundColor = [UIColor redColor];

//    animationView.frame = CGRectMake(0, screenWidth/2-50, 50, 50);//动画起始位置

//    [UIView beginAnimations:nil context:nil];//开始动画

////    [UIView setAnimationDelay:5.f];//延迟动画执行时间

//    [UIView setAnimationRepeatCount:3];//动画执行次数

//    [UIView setAnimationDuration:5.0f];//动画时间

//    animationView.frame = CGRectMake(screenWidth-50, screenWidth/2-25, 50, 50);//动画终止位置

//    [UIView commitAnimations];//结束动画

/*-------3----------使用CoreAnimation中的类---------------------------*/

//    UIView* animationView = [[UIView alloc]init];

//    [self.view addSubview:animationView];

//    animationView.backgroundColor = [UIColor redColor];

//    animationView.frame = CGRectMake(screenWidth/2-25, screenHeight/2-75, 50, 50);//此处决定动画的原始位置和最终位置

//

//    CABasicAnimation* basicAnimation = [CABasicAnimation animationWithKeyPath:@"position"];//创建基础动画---指定position属性移动

/*--------基础动画位移-------------*/

//    basicAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, screenHeight/2-75)];//动画的起始位置

//    basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(screenWidth, screenHeight/2-75)];//动画的终止位置

//    basicAnimation.duration = 5.0f;

//    basicAnimation.fillMode = kCAFillModeForwards;

//    basicAnimation.removedOnCompletion = NO;//注意点:如果basicAnimation.fillMode = kCAFillModeForwards;

//    basicAnimation.removedOnCompletion = NO;则图层在动画执行完毕之后,会保持显示动画执行后的状态。但在实际上,图层的属性值还是动画执行前的初始值,并没有改变

//    [animationView.layer addAnimation:basicAnimation forKey:@"positionAnimation"];//为视图的layer添加设置完成的动画,可以给key指定任意名字

/*--------基础动画位移-------------*/

/*----------------------------iOS动画的使用-------------------------------*/

/*

基础动画---CABasicAnimation

主要提供了对于CALayer对象中的可变属性进行简单动画的操作。比如:位移、透明度、缩放、旋转、背景色等等

*/

/*--------基础动画缩放-------------*/

//    UIView* animationView = [[UIView alloc]init];

//    [self.view addSubview:animationView];

//    animationView.backgroundColor = [UIColor redColor];

//    animationView.frame = CGRectMake(screenWidth/2-25, screenHeight/2-75, 50, 50);//此处决定动画的原始位置和最终位置

//

//    CABasicAnimation* basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];//创建基础动画-

//    basicAnimation.autoreverses = YES;//动画结束时执行逆动画

//    basicAnimation.duration = 5.0f;

//    basicAnimation.repeatCount = 1;

//    basicAnimation.fromValue = [NSNumber numberWithFloat:1.0];//开始时的倍率

//

//    basicAnimation.toValue = [NSNumber numberWithFloat:2.0];//结束时的倍率

//

//    [animationView.layer addAnimation:basicAnimation forKey:@"scale-layer"];

/*--------基础动画缩放-------------*/

//    - transform.rotation.x 围绕x轴翻转 参数:角度 angle2Radian(4)

//

//    transform.rotation.y 围绕y轴翻转 参数:同上

//

//    transform.rotation.z 围绕z轴翻转 参数:同上

//

//    transform.rotation 默认围绕z轴

//

//    transform.scale.x x方向缩放 参数:缩放比例 1.5

//

//    transform.scale.y y方向缩放 参数:同上

//

//    transform.scale.z z方向缩放 参数:同上

//

//    transform.scale 所有方向缩放 参数:同上

//

//    transform.translation.x x方向移动 参数:x轴上的坐标 100

//

//    transform.translation.y x方向移动 参数:y轴上的坐标

//

//    transform.translation.z x方向移动 参数:z轴上的坐标

//

//    transform.translation 移动 参数:移动到的点 (100,100)

/*--------基础动画旋转-------------*/

//    UIView* animationView = [[UIView alloc]init];

//    [self.view addSubview:animationView];

//    animationView.backgroundColor = [UIColor redColor];

//    animationView.frame = CGRectMake(screenWidth/2-25, screenHeight/2-75, 50, 50);//此处决定动画的原始位置和最终位置

//

//    CABasicAnimation* basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.x"];//创建基础动画-对y轴进行旋转,指定Z轴的话,就会绕中心旋转

//    basicAnimation.autoreverses = YES;//动画结束时执行逆动画

//    basicAnimation.duration = 5.0f;

//    basicAnimation.repeatCount = 1;

//    //设定旋转角度

//    basicAnimation.fromValue = [NSNumber numberWithFloat:0.0];//起始角度

//

//    basicAnimation.toValue = [NSNumber numberWithFloat:22*M_PI];//终止角度

//

//    [animationView.layer addAnimation:basicAnimation forKey:@"rotate-layer"];

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

/*--------基础动画旋转-------------*/

/*------------------------关键帧动画CAKeyframeAnimation--------------------------------------------*/

/*

CAKeyframeAnimation和CABasicAnimation都属于CAPropertAnimation的子类,CABasicAnimation只能从一个数值fromValue变换成另一个数值toValue,而CAKeyframeAnimation则会使用一个NSArray保存一组关键帧

重要属性

values:就是上述的NSArray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧

path:可以设置一个CGPathRef\CGMutablePathRef,让层跟着路径移动。path只对CALayer的anchorPoint和position起作用。如果你设置了path,那么values将被忽略。

keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes没有设置的时候,各个关键帧的时间是平分的。

*/

/*-----------------圆形路径--------------------*/

//    UIView* animationView = [[UIView alloc]init];

//    [self.view addSubview:animationView];

//    animationView.backgroundColor = [UIColor redColor];

//    animationView.frame = CGRectMake(screenWidth/2-100, screenHeight/2-100, 50, 50);//此处决定动画的原始位置和最终位置

//    CAKeyframeAnimation* keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

//    UIBezierPath* bezierPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(screenWidth/2-100, screenHeight/2-100, 200, 200)];

//    keyFrameAnimation.path = bezierPath.CGPath;

//    keyFrameAnimation.duration = 10.f;

//    [animationView.layer addAnimation:keyFrameAnimation forKey:@"pathAnimation"];

/*组动画---------CAAnimationGroup*/

/*

CAAnimationGroup是CAAnimation的子类,可以保存一组动画对象,将 CAAnimationGroup对象加入层后,组中所有对象可以同时并行运行

重要属性---animations:用来保存一组动画对象的NSArray

*/

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容