CAAnimationGroup——动画组
动画组,是CAAnimation的子类,可以保存一组动画对象,将CAAnimationGroup对象加入层后,组中所有动画对象可以同时并发运行
属性说明:
–animations:用来保存一组动画对象的NSArray
默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的beginTime属性来更改动画的开始时间
 
具体的实例如下:
实现功能:在创建的动画组中存入两个基本动画,一个是沿着Z轴旋转360度的动画,另一个是放大2倍的动画,这两个动画并发执行,动画结束后,均不在恢复原状。
代码如下:
//声明属性

#import "ViewController.h"

@interface ViewController ()
@property (strong,nonatomic)CALayer *subLayer; //声明核心动画子层
@end
//创建动画子层,同时创建触摸手势,添加的手势事件处理的是动画组

@implementation ViewController

- (void)viewDidLoad {
[super viewDidLoad]; //创建子层
self.subLayer = [CALayer layer];
self.subLayer.bounds = CGRectMake(, , , );
self.subLayer.position = CGPointMake(, );
self.subLayer.backgroundColor = [[UIColor redColor]CGColor];
[self.view.layer addSublayer:self.subLayer]; //添加触摸手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)];
tap.numberOfTapsRequired = ;
tap.numberOfTouchesRequired = ;
[self.view addGestureRecognizer:tap];
}
//定义方法,返回一个用于旋转的基本动画

#pragma mark 返回一个实现旋转的基本动画
-(CABasicAnimation*)rotationAnimationFromValue:(CGFloat)fromValue toValue:(CGFloat)tovalue
{
//创建基本动画(用于旋转)
CABasicAnimation *baseAnimation = [[CABasicAnimation alloc]init]; //设置形变属性值为旋转属性值
baseAnimation.keyPath = @"transform.rotation.z"; //设置旋转初值
baseAnimation.fromValue = @(fromValue); //设置旋转终值
baseAnimation.toValue = @(tovalue); //设置旋转动画持续时间
baseAnimation.duration = 1.0f; //设置动画旋转结束后不恢复原状
baseAnimation.removedOnCompletion = NO;
baseAnimation.fillMode = kCAFillModeForwards; return baseAnimation;
}
//定义方法,返回一个用于放缩的基本动画

#pragma mark 返回一个实现放缩的基本动画
-(CABasicAnimation*)scaleAnimationFromValue:(CGFloat)fromValue toValue:(CGFloat)tovalue
{
//创建基本动画(用于放缩)
CABasicAnimation *animScale = [[CABasicAnimation alloc]init]; //设置形变属性为放缩属性值
animScale.keyPath = @"transform.scale"; //设置放缩初值
animScale.fromValue = @(fromValue); //设置放缩终值
animScale.toValue = @(tovalue); //设置放缩动画持续时间
animScale.duration = 1.0f; //设置动画放缩结束后不恢复原状
animScale.removedOnCompletion = NO;
animScale.fillMode = kCAFillModeForwards; return animScale;
}
//处理触摸手势的事件,创建动画组,并将上面返回的两个动画对象添加进去,然后并发的执行动画组

#pragma mark -tap触摸事件
-(void)tap:(UITapGestureRecognizer *)sender
{ //方式一:依次调用各个的动画,效果也是可以的
//旋转360度
//[self.subLayer addAnimation:[self rotationAnimationFromValue:-M_PI toValue:M_PI] forKey:@"baseAnimation"];

//放大2倍
//[self.subLayer addAnimation:[self scaleAnimationFromValue:1.0 toValue:2.0] forKey:@"animScale"]; //方式二:并发执行动画组中的所有动画
//创建动画组
CAAnimationGroup *Group = [[CAAnimationGroup alloc]init]; //将各种动画对象加入数组中
NSArray *animations = @[[self rotationAnimationFromValue:-M_PI toValue:M_PI],[self scaleAnimationFromValue:1.0 toValue:2.0]]; //动画数组中的动画的属性受动画组的统一控制
Group.animations = animations; //设置动画组中所有动画的持续时间
Group.duration = 1.0; //设置动画组中所有动画运行结束后不恢复原状
Group.removedOnCompletion = NO;
Group.fillMode = kCAFillModeForwards; //往子层中添加动画组
[self.subLayer addAnimation:Group forKey:@"Group"];
}
演示结果如下:
开始时:
                 
某一时刻:(由于动画过程中截取的图,截图比较大一些)  
   
           
结束时:

iOS:核心动画之动画组CAAnimationGroup的更多相关文章

  1. iOS 核心动画

    核心动画(Core Animation) : •CoreAnimation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.fr ...

  2. IOS 动画专题 --iOS核心动画

    iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看 ...

  3. ios基础动画、关键帧动画、动画组、转场动画等

    概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...

  4. iOS 核心动画 Core Animation浅谈

    代码地址如下:http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVie ...

  5. iOS核心动画高级技巧之核心动画(三)

    iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...

  6. iOS核心动画以及UIView动画的介绍

    我们看到很多App带有绚丽狂拽的特效,别出心裁的控件设计,很大程度上提高了用户体验,在增加了实用性的同时,也赋予了app无限的生命力.这些华丽的效果很多都是基于iOS的核心动画原理实现的,本文介绍一些 ...

  7. iOS核心动画高级技巧之CALayer(一)

    iOS核心动画高级技巧之CALayer(一) iOS核心动画高级技巧之图层变换和专用图层(二)iOS核心动画高级技巧之核心动画(三)iOS核心动画高级技巧之性能(四)iOS核心动画高级技巧之动画总结( ...

  8. iOS核心动画高级技巧-4

    8. 显式动画 显式动画 如果想让事情变得顺利,只有靠自己 -- 夏尔·纪尧姆 上一章介绍了隐式动画的概念.隐式动画是在iOS平台创建动态用户界面的一种直接方式,也是UIKit动画机制的基础,不过它并 ...

  9. iOS开发UI篇—核心动画(关键帧动画)

    转自:http://www.cnblogs.com/wendingding/p/3801330.html iOS开发UI篇—核心动画(关键帧动画) 一.简单介绍 是CApropertyAnimatio ...

随机推荐

  1. 巧用 .NET 中的「合并运算符」获得 URL 中的参数

    获取 URL 中的 GET 参数,无论用什么语言开发网站,几乎是必须会用到的代码.但获取 URL 参数经常需要注意一点就是要先判断是否有这个参数存在,如果存在则取出,如果不存在则用另一个值.这个运算称 ...

  2. Android 锁屏软件MemoryDebris测试报告

    目 录 项目基本信息 第1章         引言 1.1        编写目的 1.2        项目背景 1.3        参考资料 1.4        术语和缩略语 第2章      ...

  3. android 开发 system/app目录下面有多个重复包名的apk,会不会冲突

    环境:已经拥有了root权限的android系统,我们的apk是开机启动 测试:将2个相同的版本拷贝到系统system/app目录下面 adb root #获取root权限,前提是已经开放了root权 ...

  4. Byte measurements

  5. Ming Rpc

    原文地址:http://iwantmoon.com/Post/487ab43d609f49d28ff4228241e2b7c7 Rpc(Remote Procedure Call Protocal)远 ...

  6. 2.C#基础篇-->数据类型

    C#数据类型分为:值类型,引用类型和指针类型(仅在不安全代码中使用) 1.值类型. 值类型包含:简单类型(整型,浮点类型和小数类型),枚举类型和结构类型.所有值类型都隐含的声明一个公共的无参构造函数, ...

  7. Codeforces Round #131 (Div. 1) B. Numbers dp

    题目链接: http://codeforces.com/problemset/problem/213/B B. Numbers time limit per test 2 secondsmemory ...

  8. 临时文档9--dfs

    #include<iostream> #include<stdio.h> #include<math.h> #include<string.h> usi ...

  9. 设计模式之装饰模式(Decorator)

    装饰模式原理:给对象增加特性,这种特性是一种累加的效果 代码如下 #include <iostream> #include <string> #include <list ...

  10. 【BZOJ】【1016】【JSOI2008】最小生成树计数

    Kruskal/并查集+枚举 唉我还是too naive,orz Hzwer 一开始我是想:最小生成树删掉一条边,再加上一条边仍是最小生成树,那么这两条边权值必须相等,但我也可以去掉两条权值为1和3的 ...