iOS简单动画

知识架构


1、CALayer 图层类

2、CABasicAnimation 基础动画

3、CAKeyFrameAnimation 帧动画

4、CATransition 转场动画

5、CAAnimationGroup 动画组   


layer的基本概念 

 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时,UIView内部会自动创建一个图层(CALyer对象),通过UIView的layer属性可以访问这个层。

基本属性  

Bounds;position;frame;backgroundColor; opacity;cornerRadius;borderWidth; borderColor;shadowOffset; shadowColor; shadowOpacity;

我写了一些简单的demo,大家可以看看.......  

// //  ViewController.m

 //  简单的动画// 

//  Created by 李盼盼 on 16/5/16. 

//  Copyright © 2016年 李盼盼. All rights reserved. 

//  #import "ViewController.h"  

 @interface ViewController () 

 @property (strong, nonatomic) CALayer *subLayer;

 @property (strong, nonatomic) UIView *redView;

 @property (strong, nonatomic) CALayer *subLayer2;  

 @property (weak, nonatomic) IBOutlet UIImageView *imageView; 

 @property (assign, nonatomic) NSInteger currentIndex;

 @end 

 @implementation ViewController 

 - (void)viewDidLoad {  

  self.view.backgroundColor = [UIColor colorWithRed:234/255.0f green:234/255.0f blue:234/255.0f alpha:1];  

  [super viewDidLoad]; 

//    行走的方块    _subLayer = [[CALayer alloc]init];    

 _subLayer.frame = CGRectMake(50, 50, 50, 50); 

   _subLayer.backgroundColor = [UIColor redColor].CGColor;    [self.view.layer addSublayer:_subLayer];     

 //    旋转放大的方块  

  _redView = [[UIView alloc]initWithFrame:CGRectMake(200, 100, 50, 50)];    _redView.backgroundColor = [UIColor yellowColor];  

  [self.view addSubview:_redView]; 

   //    慢慢放大的方块   

 _subLayer2 = [[CALayer alloc]init]; 

 _subLayer2.frame = CGRectMake(50, 250, 50, 50);           _subLayer2.backgroundColor = [UIColor grayColor].CGColor;     [self.view.layer addSublayer:_subLayer2];   

   //    仿真翻页  

  _imageView.image = [UIImage imageNamed:@"a0.jpg"];   

 _currentIndex = 0;     

 } 

#pragma mark ---- 上一张 

- (IBAction)Last:(UIButton *)sender {   

 if (_currentIndex == 0) {    

    _currentIndex = 12;   

 }else{        _currentIndex--;   

 }       

   _imageView.image = [UIImage imageNamed:[NSString  stringWithFormat:@"a%ld.jpg",_currentIndex]];   

   //    转场动画  

  CATransition *anim = [CATransition animation]; 

//    过度类型 

   anim.type = @"pageUnCurl"; 

//    动画过渡方向   

 anim.subtype = @"fromTop";   

 anim.duration = 0.8;    

 [_imageView.layer addAnimation:anim forKey:nil]; }

  #pragma mark ---- 下一张 

- (IBAction)next:(UIButton *)sender {

    if (_currentIndex == 12) {   

     _currentIndex = 0;   

 }else{        _currentIndex++; 

   }    

_imageView.image = [UIImage imageNamed:[NSString  stringWithFormat:@"a%ld.jpg",_currentIndex]];  

CATransition *anim = [CATransition animation];   

anim.type = @"pageCurl"; 

 anim.subtype = kCATransitionFromBottom;    

 anim.duration = 0.8;    

 [_imageView.layer addAnimation:anim forKey:nil];    

      }

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event

{    

 #pragma mark ---- 旋转放大的动画    

CABasicAnimation *rotationAnim = [CABasicAnimation animation];  

//    rotationAnim.duration = 2;  

rotationAnim.keyPath = @"transform.rotation.z";  

rotationAnim.toValue = @(3.14);  

rotationAnim.repeatCount = MAXFLOAT; 

CABasicAnimation *scaleAnim = [CABasicAnimation animation];    scaleAnim.duration = 2; 

scaleAnim.keyPath = @"transform";   

scaleAnim.toValue = [NSValuevalueWithCATransform3D:CATransform3DMakeScale(2, 2, 0)];    scaleAnim.repeatCount = MAXFLOAT; 

CAAnimationGroup *group = [CAAnimationGroup animation];    group.animations = @[rotationAnim,scaleAnim];  

group.duration = 5;    

 group.fillMode = kCAFillModeForwards; 

 group.removedOnCompletion = NO; 

  [_redView.layer addAnimation:group forKey:nil]; 

}  

-(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent *)event{

#pragma mark ---- 行走的方块

CAKeyframeAnimation *anim = [CAKeyframeAnimation animation];

anim.keyPath = @"position";

anim.duration = 5.0;

NSValue *value = [NSValue valueWithCGPoint:CGPointMake(50, 50)];

NSValue *value1 = [NSValue valueWithCGPoint:CGPointMake(50, 100)];

NSValue *value2 = [NSValue valueWithCGPoint:CGPointMake(100, 100)];

NSValue *value3 = [NSValue valueWithCGPoint:CGPointMake(100, 150)];

NSValue *value4 = [NSValue valueWithCGPoint:CGPointMake(100, 150)];

NSValue *value5 = [NSValue valueWithCGPoint:CGPointMake(50, 50)];

anim.values = @[value,value1,value2,value3,value4,value5];

// 设置动画的执行节奏

// kCAMediaTimingFunctionEaseInEaseOut:开始较慢,中间会加速,结束会减速

anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

[self.subLayer addAnimation:anim forKey:nil];

#pragma mark ---- 慢慢放大的方块

CABasicAnimation *anim1 = [CABasicAnimation animation];

//  动画执行是我时候修改属性

anim1.keyPath = @"bounds";

//    起始值

//    anim1.fromValue = [NSValue valueWithCGRect:CGRectMake(50, 250, 50, 50)];

//    目标值

anim1.toValue = [NSValue valueWithCGRect:CGRectMake(50, 250, 100, 100)];

anim1.delegate = self;

anim1.duration = 5;

[_subLayer2 addAnimation:anim1 forKey:@"animation"];

/**不删除动画,同时保存动画最终效果**/

// 动画结束后自动删除动画

anim.removedOnCompletion = NO;

// 默认保存原来的样式:设置为使用最新的样式

anim.fillMode = kCAFillModeForwards;

}

- (IBAction)removeAnim:(UIButton *)sender {

[_subLayer2 removeAnimationForKey:@"animation"];

}

#pragma mark ---- 动画的代理

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

NSLog(@"%s",__func__);

}

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

NSLog(@"%s",__func__);

}

@end

效果如下:

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

推荐阅读更多精彩内容

  • 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥ios动画全貌。在这里你可以看...
    每天刷两次牙阅读 8,421评论 6 30
  • 一、UIKit动画 第一种写法是利用属性,结合beginAnimations、commitAnimations 第...
    Gary_Tseng阅读 953评论 1 3
  • 在iOS实际开发中常用的动画无非是以下四种:UIView动画,核心动画,帧动画,自定义转场动画。 1.UIView...
    请叫我周小帅阅读 3,053评论 1 23
  • IOS动画+转场动画 #import "ViewController.h" #import "secondView...
    iOS小开发阅读 899评论 0 1
  • 两个人现在A大教学楼的顶楼看风景。 “你有没有对异性长时间的关注过?”他的视线依然直视着前方,似乎这句话不是对她说...
    桃子狸狸阅读 224评论 0 0