知识架构

  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<UITouch *> *)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 = [NSValue valueWithCATransform3D: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<UITouch *> *)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

效果如下:

iOS简单动画的更多相关文章

  1. IOS 简单动画 首尾式动画

    首尾式动画 首尾式动画即通过实现控件由初始状态到结束状态的过程.(主要表现在控件的Frame 透明度 ) // // ViewController.m // CX 简单动画 // // Created ...

  2. iOS 简单动画 序列帧动画

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ NSLog(@"旭宝爱吃 ...

  3. iOS 简单动画 block动画

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ UIView * view = [ ...

  4. iOS简单动画效果:闪烁、移动、旋转、路径、组合

    #define kDegreesToRadian(x) (M_PI * (x) / 180.0) #define kRadianToDegrees(radian) (radian*180.0)/(M_ ...

  5. iOS CAReplicatorLayer 简单动画

    代码地址如下:http://www.demodashi.com/demo/11601.html 写在最前面,最近在看学习的时候,偶然间发现一个没有用过的Layer,于是抽空研究了下,本来应该能提前记录 ...

  6. iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题

    本文转载至 http://www.tuicool.com/articles/aANBF3m 时间 2014-12-07 20:13:37  segmentfault-博客原文  http://segm ...

  7. IOS 核心动画之CAKeyframeAnimation - iBaby

    - IOS 核心动画之CAKeyframeAnimation - 简单介绍 是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation ...

  8. Swift 实现iOS Animation动画教程

    这是一篇翻译文章.原文出处:http://www.raywenderlich.com/95910/uiview-animation-swift-tutorial 动画( animation)是iOS用 ...

  9. iOS 开发--动画

    在iOS开发中,制作动画效果是最让开发者享受的环节之一.一个设计严谨.精细的动画效果能给用户耳目一新的效果,吸引他们的眼光 —— 这对于app而言是非常重要的.我们总是追求更为酷炫的实现,如果足够仔细 ...

随机推荐

  1. Android sdk资源包res里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)

    (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854) (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x ...

  2. *HDU1151 二分图

    Air Raid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  3. ZK listbox 两种分页使用及比较

    参考:http://tsinglongwu.iteye.com/blog/849923 以下代码模拟数据量大时情况,采用“<paging>”组件方式 前台Listbox.zul : < ...

  4. 访问API安全性认证设计

    1.用户POST登录(账号+密码) | |成功 |2.返回(Private key+时间戳)加密字符串+用户信息+缓存到内存中 | |发起其它请求 |3.发起请求时携带Request参数和(Reque ...

  5. [dpdk] 熟悉SDK与初步使用 (三)(IP Fragmentation源码分析)

    对例子IP Fragmentation的熟悉,使用,以及源码分析. 功能: 该例子的功能有二: 一: 将IP分片? 二: 根据路由表,做包转发. 路由表如下: IP_FRAG: Socket : ad ...

  6. scala中的数组的转换操作

    1.共有两种操作 转换成一种新的数组 2.yield转换 3.函数式编程转换

  7. 【Html 学习笔记】第二节——文本格式

    上一节基本已经了解了一些html的基础,这一节主要学习html处理文本相关内容,直接看内容吧. 字体: 预格式文本:<pre> 地址:<address> 缩写:<abbr ...

  8. Emmet使用

    emmet官方文档 [翻译]Emmet (ZenCoding) 缩写语法 <!-- ul>li.item$*5 --> <ul> <li class="i ...

  9. oracle 函数调用

    --带out的函数 create or replace function fun_try(v_name varchar,v_outname out varchar)return varchar2 is ...

  10. dsview

    http://blog.csdn.net/gzshun/article/details/7495488 http://blog.csdn.net/hjl_1991/article/details/50 ...