iOS动画之CABasicAnimation的使用方法(移动,旋转,缩放)
设定动画CABasicAnimation的属性和说明
| 属性 | 说明 |
|---|---|
| duration | 动画的时间 |
| repeatCount | 重复的次数。不停重复设置为 HUGE_VALF |
| repeatDuration | 设置动画的时间。 |
| beginTime | 指定动画开始的时间。从开始延迟几秒的话,设置为【CACurrentMediaTime() + 秒数】 的方式 |
| timingFunction | 设置动画的速度变化 |
| autoreverses | 动画结束时是否执行逆动画 |
| fromValue | 所改变属性的起始值 |
| toValue | 所改变属性的结束时的值 |
| byValue | 所改变属性相同起始值的改变量 |
//创建一个image view
UIImageView *imageview=[[UIImageView alloc]init];
imageview.image=[UIImage imageNamed:@"logo.png"];
imageview.frame=CGRectMake(50, 50, imageview.image.size.width, imageview.image.size.height);
[self.view addSubview:imageview];
//动画关键字属性设置说明
| 值 | 说明 | 使用形式 |
|---|---|---|
| transform.scale | 比例转化 | @(0.8) |
| transform.scale.x | 宽的比例 | @(0.8) |
| transform.scale.y | 高的比例 | @(0.8) |
| transform.rotation.x | 围绕x轴旋转 | @(M_PI) |
| transform.rotation.y | 围绕y轴旋转 | @(M_PI) |
| transform.rotation.z | 围绕z轴旋转 | @(M_PI) |
| cornerRadius | 圆角的设置 | @(50) |
| backgroundColor | 背景颜色的变化 | (id)[UIColor purpleColor].CGColor |
| bounds | 大小,中心不变 | [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)]; |
| position | 位置(中心点的改变) | [NSValue valueWithCGPoint:CGPointMake(300, 300)]; |
| contents | 内容,比如UIImageView的图片 | imageAnima.toValue = (id)[UIImage imageNamed:@"to"].CGImage; |
| opacity | 透明度 | @(0.7) |
| contentsRect.size.width | 横向拉伸缩放 | @(0.4)最好是0~1之间的 |
//1、移动
CABasicAnimation *moveAnimate=[CABasicAnimation animationWithKeyPath:@"position"];
//动画时长
moveAnimate.duration=2.0;
//动画重复次数
moveAnimate.repeatCount=HUGE_VALF;
//动画开始时间
moveAnimate.beginTime=CACurrentMediaTime()+2;
//是否自动执行逆动画
moveAnimate.autoreverses=YES;
//动画执行完后会回到初始状态,需要设置这两个属性
moveAnimate.removedOnCompletion=NO;
moveAnimate.fillMode=kCAFillModeForwards;
//设置动画初始位置
moveAnimate.fromValue=[NSValue valueWithCGPoint:imagetemp.layer.position];
//设置动画目的位置
moveAnimate.toValue=[NSValue valueWithCGPoint:CGPointMake(50, 50)];
//设置动画速率
moveAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
//添加动画
[imagetemp.layer addAnimation:moveAnimate forKey:@"move-layer"];
//2、缩放
CABasicAnimation *scaleAnimate=[CABasicAnimation animationWithKeyPath:@"transform.scale"];
//动画时长
scaleAnimate.duration=2.0;
//动画重复次数
scaleAnimate.repeatCount=HUGE_VALF;
//动画开始时间
scaleAnimate.beginTime=CACurrentMediaTime()+2;
//是否自动执行逆动画
scaleAnimate.autoreverses=YES;
//动画执行完后会回到初始状态,需要设置这两个属性
scaleAnimate.removedOnCompletion=NO;
scaleAnimate.fillMode=kCAFillModeForwards;
//设置动画初始位置
scaleAnimate.fromValue=[NSNumber numberWithFloat:1.0];
//设置动画目的位置
scaleAnimate.toValue=[NSNumber numberWithFloat:5.0];
//设置动画速率
scaleAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
//添加动画
[imagetemp.layer addAnimation:scaleAnimate forKey:@"scale-layer"];
//3、旋转
CABasicAnimation *rotateAnimate=[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
//动画时长
rotateAnimate.duration=2.0;
//动画重复次数
rotateAnimate.repeatCount=HUGE_VALF;
//动画开始时间
rotateAnimate.beginTime=CACurrentMediaTime()+2;
//是否自动执行逆动画
rotateAnimate.autoreverses=YES;
//动画执行完后会回到初始状态,需要设置这两个属性
rotateAnimate.removedOnCompletion=NO;
rotateAnimate.fillMode=kCAFillModeForwards;
//设置动画初始位置
rotateAnimate.fromValue=[NSNumber numberWithFloat:0];
//设置动画目的位置
rotateAnimate.toValue=[NSNumber numberWithFloat:M_PI];
//设置动画速率
rotateAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
//添加动画
[imagetemp.layer addAnimation:rotateAnimate forKey:@"rotate-layer"];
//4、渐隐动画
CABasicAnimation *opacityAnimate=[CABasicAnimation animationWithKeyPath:@"opacity"];
//动画时长
opacityAnimate.duration=2.0;
//动画重复次数
opacityAnimate.repeatCount=HUGE_VALF;
//动画开始时间
opacityAnimate.beginTime=CACurrentMediaTime()+2;
//是否自动执行逆动画
opacityAnimate.autoreverses=YES;
//动画执行完后会回到初始状态,需要设置这两个属性
opacityAnimate.removedOnCompletion=NO;
opacityAnimate.fillMode=kCAFillModeForwards;
//设置动画初始位置
opacityAnimate.fromValue=[NSNumber numberWithFloat:0];
//设置动画目的位置
opacityAnimate.toValue=[NSNumber numberWithFloat:1];
//设置动画速率
opacityAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
//添加动画
[imagetemp.layer addAnimation:opacityAnimate forKey:@"opacity-layer"];
//5、组合动画
CAAnimationGroup *group=[CAAnimationGroup animation];
//动画时长
group.duration=2.0;
//动画重复次数
group.repeatCount=HUGE_VALF;
group.animations=[NSArray arrayWithObjects:moveAnimate,scaleAnimate,rotateAnimate,opacityAnimate, nil];
//添加动画
[imagetemp.layer addAnimation:group forKey:@"group-layer"];
//6、设置委托,添加CAAnimationDelegate,监测开始和结束事件
group.delegate=self;
- (void)animationDidStart:(CAAnimation *)theAnimation {
//动画开始了
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
//动画结束了
}
iOS动画之CABasicAnimation的使用方法(移动,旋转,缩放)的更多相关文章
- iOS开发之动画编程的几种方法
iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKe ...
- ios学习--详解IPhone动画效果类型及实现方法
详解IPhone动画效果类型及实现方法是本文要介绍的内容,主要介绍了iphone中动画的实现方法,不多说,我们一起来看内容. 实现iphone漂亮的动画效果主要有两种方法,一种是UIView层面的,一 ...
- 解析 iOS 动画原理与实现
这篇文章不会教大家如何实现一个具体的动画效果,我会从动画的本质出发,来说说 iOS 动画的原理与实现方式. 什么是动画 动画,顾名思义,就是能“动”的画.人的眼睛对图像有短暂的记忆效应,所以当眼睛看到 ...
- IOS动画隐式,显式,翻页
// ViewController.m // IOS动画0817 // // Created by 张艳锋 on 15/8/17. // Copyright (c) 2015年 张艳锋. Al ...
- iOS动画原理
1. iOS动画原理 本质:动画对象(这里是UIView)的状态,基于时间变化的反应 分类:可以分为显式动画(关键帧动画和逐帧动画)和隐式动画 关键帧和逐帧总结:关键帧动画的实现方式,只需要修改某个属 ...
- iOS 动画基础
原文:http://www.cnblogs.com/lujianwenance/p/5733846.html 今天说一下有关动画的基础,希望能帮助到一些刚接触iOS动画或者刚开始学习iOS的同学, ...
- IOS动画总结
IOS动画总结 一.基本方式:使用UIView类的UIViewAnimation扩展 + (void)beginAnimations:(NSString *)animationID context ...
- IOS 动画专题 --iOS核心动画
iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看 ...
- iOS动画编程
IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKeyframeAnimation& ...
- iOS 动画篇 之 Core Animation (一)
iOS中实现动画有两种方式,一种是自己不断的通过drawRect:方法来绘制,另外一种就是使用核心动画(Core Animation). 导语: 核心动画提供高帧速率和流畅的动画,而不会增加CPU的负 ...
随机推荐
- 【Zookeeper】Win平台伪集群搭建
下载稳定版Zookeeper https://downloads.apache.org/zookeeper/stable/ GZ包: apache-zookeeper-3.6.3-bin.tar.gz ...
- Git的GPG签名 —— Tag签名 Verified验证,防伪造的gitee/github commit验证
相关资料: 如何使用git通过ssh协议拉取gitee上的项目代码--如何正确的免密使用git 不论是gitee还是GitHub都有两种公钥设置,一种是ssh公钥,另一种则是GPG公钥.ssh公钥是为 ...
- 2023 年上海市大学生程序设计竞赛 - 五月赛A,B,C
A. 选择 多造几组数据可以发现 \(dp[n] = dp[n / 2] + 1\). 假如一个序列为\(\{1,2,\cdots,n\}\),那我们从\(n/2\)后都减去\(n/2\),序列就 ...
- 使用FModel提取黑神话悟空的资产
目录 前言 设置 效果展示 闲聊 可能遇到的问题 没有相应的UE引擎版本选项 前言 黑神话悟空昨天上线了,解个包looklook. 本文内容比较简洁,仅介绍解包黑神话所需的专项配置,关于FModel的 ...
- Linux——添加默认路由(能ping通本网段,但是ping不通其他网段)
2024/07/15 1.问题描述 2.问题处理 3.其他问题 1.问题描述 昨天服务器突然断电,今天重启后,网络出了些问题,具体情况如下: 能ping通本机IP ping不通网关 ping不通本网段 ...
- armbian指令大全
修复缺失内容 使用以下命令修复安装时缺失的内容: sudo apt --fix-broken install 使用 aptitude 安装软件 aptitude 是 Debian 及其衍生系统中功能强 ...
- hook拼多多客服软件发消息,拼多多客服机器人代码,拼多多发消息代码
最近由于工作需要,逆向了拼多多客服平台,能调用消息监听.消息发送.根据订单号发起会话,是纯hook实现的,demo包括c++调用demo,c#调用demo.hook 的dll是c++编写的,有需要的人 ...
- 使用js闭包实现可取消的axios请求
在平常开发中,经常会遇到重复请求的情况,也许是因为网络问题,也许是因为接口问题等等,传统做法是客户端采用防抖来限制用户发送接口的频率,一般出个loading转圈圈的形式, 但是很少使用取消请求的做法, ...
- JS实现树形结构数据的模糊搜索查询
简单示例: 需求:输入 "题2" 字,希望树形结构中带有 "题2" 字的项显示,即使父节点没有,但子节点含有,父节点仍要返回. let arr = [ { ti ...
- chainLink vrf实验
目标 用vrf写一个随机红包 数据结构 红包: struct Envelope { Type t; // 类型,只是erc20 和eth红包 ERC20 token; // erc20 ,如果是erc ...