知识架构

  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. EaseMode

    The following graphs demonstrate the different values of EasingMode, where f(t) represents the anima ...

  2. Unity3D DFGUI根据名称获取多个子控件代码

    dfPanel control = gameObject.GetComponent<dfPanel>(); dfLabel avatarName = control.Find<dfL ...

  3. java并发控制:lock

    一.synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性.那么为什么会出现Lock呢? 在上面一篇文章中,我们了解到如果一个代码块被syn ...

  4. javascript学习之时间组件

    写了一个时间组件,哪里需要哪里调(菜鸟级别,大牛路过就Ok了): 先有一个HTML文件: <!doctype> <html> <head> <title> ...

  5. thinkphp2

  6. 泛型:HashMap的用法--输入字母输出数目

    public static void main(String[] args) { Map <String ,Integer> m =new HashMap<String , Inte ...

  7. ps工具箱总结

    1.矩形工具 四个属性 1.选区2.重叠选区3.减去选区4.区域化缩小选区 样式:固定比例 固定大小 正常 //前两项可以设置宽高 3.快速选择工具.魔棒工具 快速选择工具: 三个属性 1.选区2.增 ...

  8. 2016年终分析(传统开发与网络时代的Java开发)

    2016重大事件:(在此将2016年的开发称为传统开发) 1.乌镇互联网大会大会(大数据&云计算) 2.某东struts2安全漏洞 3.作为一个程序呀对于淘宝双11和双12的分析应该是最好的案 ...

  9. HDU 1166 敌兵布阵(分块)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  10. A Taxonomy of Parallel Processor Architectures

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION