CABasicAnimation 基础
一、CABasicAnimation
CAPropertyAnimation的子类
属性解析:
fromValue:keyPath相应属性的初始值
toValue:keyPath相应属性的结束值
随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue
如果fillMode=kCAFillModeForwards和removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。比如,CALayer的position初始值为(0,0),CABasicAnimation的fromValue为(10,10),toValue为(100,100),虽然动画执行完毕后图层保持在(100,100)这个位置,实质上图层的position还是为(0,0)
CAPropertyAnimation
CAPropertyAnimation是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:CABasicAnimation和CAKeyframeAnimation。
属性解析:
keyPath:通过指定CALayer的一个属性名称为keyPath(NSString类型),并且对CALayer的这个属性的值进行修改,达到相应的动画效果。比如,指定@”position”为keyPath,就修改CALayer的position属性的值,以达到平移的动画效果。
二:平移动画
效果:
代码:
[code]- (void)viewDidLoad
{
[super viewDidLoad];
// 1.创建layer
CALayer *myLayer = [CALayer layer];
myLayer.bounds = CGRectMake(0, 0, 100, 100); myLayer.anchorPoint = CGPointZero;
myLayer.position = CGPointMake(100, 100);
myLayer.backgroundColor = [UIColor greenColor].CGColor;
// 2.将自定义Layer添加到控制器的view的layer上
[self.view.layer addSublayer:myLayer]; self.myLayer = myLayer; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// 1. 创建核心动画
CABasicAnimation *anima = [CABasicAnimation animation] ;
// 1.1告诉系统要执行什么样的动画
anima.keyPath = @"position";
// 设置通过动画将layer从哪
// anima.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)];
// 到哪(到指定的位置)
anima.toValue = [NSValue valueWithCGPoint:CGPointMake(200, 300)];
// 在当前位置的基础上增加多少
// anima.byValue = [NSValue valueWithCGPoint:CGPointMake(0, 300)]; // 设置动画时间
anima.duration = 3; // 1.2 设置动画执行完毕之后不删除动画
anima.removedOnCompletion = NO;
// 1.3 设置保存动画的最新状态
anima.fillMode = kCAFillModeForwards; // 2.添加核心动画到Layer
[self.myLayer addAnimation:anima forKey:nil];
}
三:缩放动画
效果:
代码:
[code]- (void)viewDidLoad
{
[super viewDidLoad];
// 1.创建layer
CALayer *myLayer = [CALayer layer];
myLayer.bounds = CGRectMake(0, 0, 100, 100); myLayer.anchorPoint = CGPointZero;
myLayer.position = CGPointMake(100, 100);
myLayer.backgroundColor = [UIColor greenColor].CGColor;
// 2.将自定义Layer添加到控制器的view的layer上
[self.view.layer addSublayer:myLayer]; self.myLayer = myLayer; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// 1. 创建核心动画
CABasicAnimation *anima = [CABasicAnimation animation] ;
// 1.1设置动画类型
anima.keyPath = @"bounds"; // 1.2 设置动画执行完毕之后不删除动画
anima.removedOnCompletion = NO;
// 1.3 设置保存动画的最新状态
anima.fillMode = kCAFillModeForwards;
// 1.4设置动画时间
anima.duration = 1; // 1.5修改动画
anima.toValue =[NSValue valueWithCGRect: CGRectMake(0, 0, 200, 200)]; // 2.添加核心动画到Layer
[self.myLayer addAnimation:anima forKey:nil];
}
四:旋转动画
效果:
代码:
[code]- (void)viewDidLoad
{
[super viewDidLoad];
// 1.创建layer
CALayer *myLayer = [CALayer layer];
myLayer.bounds = CGRectMake(0, 0, 100, 100); myLayer.anchorPoint = CGPointZero;
myLayer.position = CGPointMake(100, 100);
myLayer.backgroundColor = [UIColor greenColor].CGColor;
// 2.将自定义Layer添加到控制器的view的layer上
[self.view.layer addSublayer:myLayer]; self.myLayer = myLayer; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// 1. 创建核心动画
CABasicAnimation *anima = [CABasicAnimation animation] ;
// 1.1设置动画类型
anima.keyPath = @"transform"; // 1.2 设置动画执行完毕之后不删除动画
anima.removedOnCompletion = NO;
// 1.3 设置保存动画的最新状态
anima.fillMode = kCAFillModeForwards;
// 1.4设置动画时间
anima.duration = 1; // 1.5修改动画
anima.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI_4, 0, 0, 1)]; // 2.添加核心动画到Layer
[self.myLayer addAnimation:anima forKey:nil]; }
五:通过transform(KVC)的方式设置
y方向缩放1.5倍
效果:
代码:
[code]- (void)viewDidLoad
{
[super viewDidLoad];
// 1.创建layer
CALayer *myLayer = [CALayer layer];
myLayer.bounds = CGRectMake(0, 0, 100, 100); myLayer.anchorPoint = CGPointZero;
myLayer.position = CGPointMake(100, 100);
myLayer.backgroundColor = [UIColor greenColor].CGColor;
// 2.将自定义Layer添加到控制器的view的layer上
[self.view.layer addSublayer:myLayer]; self.myLayer = myLayer; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// 1. 创建核心动画
CABasicAnimation *anima = [CABasicAnimation animation] ;
// 1.1设置动画类型
// anima.keyPath = @"transform.translation.x";
anima.keyPath = @"transform.scale.y"; // 1.2 设置动画执行完毕之后不删除动画
anima.removedOnCompletion = NO;
// 1.3 设置保存动画的最新状态
anima.fillMode = kCAFillModeForwards;
// 1.4设置动画时间
anima.duration = 1; // y方向缩放1.5倍
anima.toValue = @(1.5); // 2.添加核心动画到Layer
[self.myLayer addAnimation:anima forKey:nil]; }
CABasicAnimation 基础的更多相关文章
- Core Animation之CABasicAnimation(基础动画)
#import "ViewController.h" @interface ViewController () @property(nonatomic,strong)UIButto ...
- CABasicAnimation基础核心动画
核心动画之作用在层上面. 动画的本质是改图层的某一个属性. CABasicAnimation *anim = [CABasicAnimation animation]; 图层有 ...
- iOS开发CABasicAnimation动画理解
1.CALayer简介 CALayer是个与UIView很类似的概念,同样有backgroundColor.frame等相似的属性,我们可以将UIView看做一种特殊的CALayer.但实际上UIVi ...
- iOS总结_UI层自我复习总结
UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...
- iOS 模仿一个小项目,总结一下里边的模块
ManoBoo: 参考链接:http://www.jianshu.com/p/fd4c46c31508 这个小的项目是参考ManoBoo的简书的,链接在上方,自己在仿做的过程中,也离不开Man ...
- iOS CoreAnimation 核心动画
一 介绍 一组非常强大的动画处理API 直接作用在CALAyer上,并非UIView(UIView动画) CoreAnimation是所有动画的父类,但是不能直接使用,应该使用其子类 属性: dura ...
- iOS简单动画
知识架构 CALayer 图层类 CABasicAnimation 基础动画 CAKeyFrameAnimation 帧动画 CATransition 转场动画 CAAnimationGroup 动画 ...
- CALayer 简单操作和实际应用
1.CALayer //每一个UIView,都存在一个CALayer.(主层) //CALayer的功能 描边,圆角,阴影... //CALayer 属于QuartzCore绘图框架 //明明有UIC ...
- UI进阶 动画
前言:所谓动画,即应用界面上展示的各种过渡效果,不过其实没有动画并不影响我们产品的功能实现 一.动画 1.动画可以达到的效果 传达状态 提高用户对直接操作的感知 帮助用户可视化操作的结果 2.使用动画 ...
随机推荐
- 在线GET/POST API接口请求模拟测试工具
在前后端开发过程中经常需要对HTTP接口进行测试,推荐几款比较好用的测试工具 Postman https://www.getpostman.com/ 强大的HTTP请求测试工具 支持多平台 Advan ...
- 邮件发布google blogger 博客
<?php $to = "@gmail.com";$subject = "Test mail";$message = "Hello! This ...
- 关于Unicode字符集
最初的unicode编码是固定长度的,16位,也就是2两个字节代表一个字符,这样一共可以表示65536个字符.显然,这样要表示各种语言中所有的字符是远远不够的.Unicode4.0规范考虑到了这种情况 ...
- hdu_2955_Robberies(01背包)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2955 题意:给一个概率p和n个银行,每个银行有一些钱和被抓的概率,问在满足被抓的概率在p以下,抢到的最 ...
- 再谈KMP
昨天讲解了字典树和AC自动机后感觉整个人都蒙掉了.还好就是自己今天在网上看见一篇对KMP讲解非常详细的帖子,果断收藏.(点击这里查看) 然后代码的实现也就简单分析一些了,具体的知识点大家直接自己链接过 ...
- reincarnation server
- parent of all the drivers and servers - when a driver or server dies, RS collects it. - RS checks ...
- 在 .NET 4 中使用托管可扩展性框架构建可组合的应用程序
https://msdn.microsoft.com/zh-cn/library/ff576068.aspx http://blogs.msdn.com/b/nblumhardt/archive/20 ...
- 运维必备:Oracle自备份精简教程(linux及win)
Oracle在linux环境下的自动备份 1.自动导出及历史文件删除脚本 su - oracle<<EOF cd /db_backup/databak mv orabak*.* /db_b ...
- PS:抠图方法1(利用对比度ctrl+l)
PS:抠图方法1(利用对比度ctrl+l) 工具/原料 Photoshop.美女照片 方法/步骤 小编使用的是Photoshop cs5版本,大家使用其他版本都没有关系,界面略有不同,但操 ...
- web开发在线调试
来源: http://www.cnblogs.com/itech/archive/2012/09/23/2698754.html 通常我们开发web时候,使用ie的developertoolgs,或c ...