iOS - Animation 八种方法
一.//UIView动画
//能够做动画的属性, feame, center, bounds, alpha, transfom, backgroundcolor
//iOS4.0 之前如果想做动画, 必须放在开始可提交之前才有效
//对属性更改值是有效值, 最终会对视图作出修改
//开始动画
[UIView beginAnimations:nil context:nil];
//1.设置动画持续的时间 --- 单位 秒
[UIView setAnimationDuration:2];
//2.设置动画代理(但是不需要服从代理)
[UIView setAnimationDelegate:self];
//3.但是动画结束后执行的方法
[UIView setAnimationDidStopSelector:@selector(handleDidStop)];
//4.设置动画延迟的时间 --- 单位 秒
// [UIView setAnimationDelay:2];
//5.设置动画从当前状态发生变化
[UIView setAnimationBeginsFromCurrentState:YES];
//6.设置动画是否反转
[UIView setAnimationRepeatAutoreverses:YES];
//7.设置动画重复次数
[UIView setAnimationRepeatCount:10];
//8.设置动画变化的曲线
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//center -- 视图位置
CGPoint center = self.redView.center;
center.y += 10;
self.redView.center = center;
self.redView.alpha = 0.1; //alpha -- 透明度
//transition 旋转--缩放
self.redView.transform = CGAffineTransformRotate(self.redView.transform, 0.5);
self.redView.transform = CGAffineTransformScale(self.redView.transform, 0.5, 0.5);
[UIView commitAnimations]; //提交动画
二.iOS4.0 之后 基于Block的动画 -- (Leo推荐)
//1.最简单的black 方法
[UIView animateWithDuration:4 animations:^{
//对属性更改, 做动画操作
//center -- 视图位置
CGPoint center = self.redView.center;
center.y += 10;
self.redView.center = center;
//alpha -- 透明度
self.redView.alpha = 0.1;
//transition 旋转--缩放
self.redView.transform = CGAffineTransformRotate(self.redView.transform, 0.5);
self.redView.transform = CGAffineTransformScale(self.redView.transform, 0.5, 0.5);
}];
//2.block 形式升级版 -- 可以检测动画结束时间
[UIView animateWithDuration:4 animations:^{
//对属性更改, 做动画操作
//center -- 视图位置
CGPoint center = self.redView.center;
center.y += 10;
self.redView.center = center;
//alpha -- 透明度
self.redView.alpha = 0.1;
//transition 旋转--缩放
self.redView.transform = CGAffineTransformRotate(self.redView.transform, 0.5);
self.redView.transform = CGAffineTransformScale(self.redView.transform, 0.5, 0.5);
} completion:^(BOOL finished) {
...
}];
//3.block 形式加强版 -- 不光可以捕获结束时间, 而且可以配置多个参数
[UIView animateWithDuration:4 delay:1 options:UIViewAnimationOptionAutoreverse animations:^{
//对属性更改, 做动画操作
//center -- 视图位置
CGPoint center = self.redView.center;
center.y += 10;
self.redView.center = center;
//alpha -- 透明度
self.redView.alpha = 0.1;
//transition 旋转--缩放
self.redView.transform = CGAffineTransformRotate(self.redView.transform, 0.5);
self.redView.transform = CGAffineTransformScale(self.redView.transform, 0.5, 0.5);
} completion:^(BOOL finished) {
...
}];
//4.弹簧效果
//1.持续时间; 2.延迟时间; 3.弹簧强度; 4.开始变化速度; 5.动画效果参数; 6.动画代码; 7.结束动画
[UIView animateWithDuration:4 delay:0 usingSpringWithDamping:0.01 initialSpringVelocity:10 options:UIViewAnimationOptionCurveEaseInOut animations:^{
//对属性更改, 做动画操作
//transition 旋转--缩放
self.thLabel.transform = CGAffineTransformScale(self.redView.transform, 1.2, 1.2);
} completion:nil];
三.过度动画 - 界面间的过度
[UIView transitionWithView:self.redView duration:4 options:UIViewAnimationOptionCurveEaseInOut animations:^{
//旋转
self.redView.transform = CGAffineTransformRotate(self.redView.transform, M_PI_2); // 旋转45°, M_PI_2 90°, M_PI_1 180°
} completion:nil];
//从一个视图切换到另一个视图
[UIView transitionFromView:self.redView toView:self.yellowView duration:1 options:UIViewAnimationOptionTransitionCurlDown completion:^(BOOL finished) {
/* self.yellowView = [[UIView alloc]initWithFrame:self.redView.frame]; */
//改变指针的指向
UIView *tempView = [self.redView retain];
self.redView = self.yellowView;
self.yellowView = tempView;
[tempView release];
}];
四.UIView 与 CALayer 的区别
//UIView 其实是CALayer 层的简单封装, 真正绘制显示内容的还是CAlayer 每一个视图都有一个layer 属性可以访问到自己的layer 层, UIView封装了常用的属性, 不常用的属性还是要设置CALayer
//1.设置视图边框的宽度
self.redView.layer.borderWidth = 2;
//设置视图边框的颜色
self.redView.layer.borderColor = [UIColor whiteColor].CGColor;
//3.设置视图的圆角
self.redView.layer.cornerRadius = 20;
//4.多余部分剪裁掉
self.redView.layer.masksToBounds = YES;
//5.设置视图的锚点 -- 旋转的基准点 (不设置默认为中心)
self.redView.layer.anchorPoint = CGPointMake(1, 1);
//基准点
self.redView.layer.position = CGPointMake(240, 360);
self.redView.transform = CGAffineTransformRotate(self.redView.transform, M_PI_4);
五.CA属性动画 -- (基本属性动画)
(1)
//CA动画修改属性值最终不会作用到视图
CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"opacity"];
//开始变化值
basic.fromValue = @(1.0);
//结束变化值
basic.toValue = @(0.1);
basic.duration = 2;
//添加到视图的layer 层
[self.redView.layer addAnimation:basic forKey:nil];
(2)
CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"position.x"];
//变化的开始值
basic.fromValue = @(self.cloud.center.x);
//变化的结束值
basic.toValue = @([UIScreen mainScreen].bounds.size.width + CGRectGetWidth(self.cloud.frame) / 2);
basic.duration = 5;
basic.repeatCount = 100;
//添加到视图的 layer 层
[self.cloud.layer addAnimation:basic forKey:nil];
六.CA属性动画 -- 关键帧动画
CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"position"];
CGPoint point1 = self.cloud.center;
CGPoint point2 = CGPointMake(160, 45);
CGPoint point3 = CGPointMake([UIScreen mainScreen].bounds.size.width - 45, 425);
NSValue *value1 = [NSValue valueWithCGPoint:point1];
NSValue *value2 = [NSValue valueWithCGPoint:point2];
NSValue *value3 = [NSValue valueWithCGPoint:point3];
keyFrame.values = @[value1, value2, value3, value1];
keyFrame.duration = 10;
keyFrame.repeatCount = 100;
[self.cloud.layer addAnimation:keyFrame forKey:nil];
七.CA过度动画
CATransition *transtion = [CATransition animation];
//配置过度动画类型
transtion.type = @"cube";
//配置过度动画方向
transtion.subtype = kCATransitionFromLeft;
//添加到视图layer 层
[self.redView.layer addAnimation:transtion forKey:nil];
/* 过渡效果 (苹果私有)
fade //交叉淡化过渡(不支持过渡方向) kCATransitionFade
push //新视图把旧视图推出去 kCATransitionPush
moveIn //新视图移到旧视图上面 kCATransitionMoveIn
reveal //将旧视图移开,显示下面的新视图 kCATransitionReveal
cube //立方体翻滚效果
oglFlip //上下左右翻转效果
suckEffect //收缩效果,如一块布被抽走(不支持过渡方向)
rippleEffect //滴水效果(不支持过渡方向)
pageCurl //向上翻页效果
pageUnCurl //向下翻页效果
cameraIrisHollowOpen //相机镜头打开效果(不支持过渡方向)
cameraIrisHollowClose //相机镜头关上效果(不支持过渡方向)
*/
八.CA分组动画
//1.关键帧动画 -- 沿圆形轨迹移动
CAKeyframeAnimation *keyframe = [CAKeyframeAnimation animationWithKeyPath:@"position"];
//绘制半圆路径
CGFloat y = [UIScreen mainScreen].bounds.size.width - 100;
UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(0, y) radius:y startAngle:-M_PI_2 endAngle:M_PI_2 clockwise:YES];
//关键帧动画给上圆形轨迹
keyframe.path = path.CGPath; // 让 UIBezierPath 作为移动轨迹
keyframe.duration = 5;
keyframe.repeatCount = 100;
//2.关键帧动画 -- 气球的放大缩小
CAKeyframeAnimation *keyFrame1 = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
keyFrame1.values = @[@(1.0), @(1.2), @(1.4), @(1.6), @(1.8), @(2.0), @(1.8), @(1.6), @(1.4), @(1.2), @(1.0)];
keyFrame1.duration = 5;
//创建分组动画
CAAnimationGroup *group = [CAAnimationGroup animation];
group.animations = @[keyframe, keyFrame1];
group.duration = 5;
group.repeatCount = 1000;
[self.balloon.layer addAnimation:group forKey:nil];
转载于:https://www.cnblogs.com/tapple/p/4817458.html
iOS - Animation 八种方法相关推荐
- 提高IIS网站服务器的效率的八种方法 (转载)
作者:未知 请作者速与本人联系 以下是提高IIS 5.0网站服务器的执行效率的八种方法: 1. 启用HTTP的持续作用可以改善15~20%的执行效率. 2. 不启用记录可以改善5~8%的执行效率. ...
- Linux下进程通信的八种方法
Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...
- python管道安装包_Python 炫技操作:安装包的八种方法
1. 使用 easy_install easy_install 这应该是最古老的包安装方式了,目前基本没有人使用了.下面是 easy_install 的一些安装示例# 通过包名,从PyPI寻找最新版本 ...
- 译 | 在 Azure SQL 上节约成本的八种方法
点击上方关注"汪宇杰博客" 原文:John 'JG' Chirapurath 翻译:汪宇杰 导语 当今世界,企业正崭露头角,渴望重整与重建,但仍处于不确定的时期.节约成本并将开支重 ...
- MATLAB求解线性方程组的八种方法
MATLAB求解线性方程组的八种方法 求解线性方程分为两种方法–直接法和迭代法 常见的方法一共有8种 直接法 Gauss消去法 Cholesky分解法 迭代法 Jacobi迭代法 Gauss-Seid ...
- Python炫技操作:花式导包的八种方法
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 五岳寻仙不辞远,一身好入名山游. ...
- HTTP之原理,长短连接,响应码,三握四挥,八种方法
文章目录 1 HTTP原理 1.1 HTTP协议与TCP/IP协议的关系 1.2 无状态的HTTP协议 2 长短连接详解 2.1 简介 2.2 TCP短连接 2.3 TCP长连接 2.4 长连接短连接 ...
- 【fraud detection】防网络广告作弊(点击欺诈)的八种方法
防网络广告作弊(点击欺诈)的八种方法 网络广告防作弊(点击欺诈)的技术手段有很多种,归纳起来,大致有以下八点: 1. IP防止作弊:一般计费方式是按照24小时内唯一IP,可以将每个IP记入数据库,当下 ...
- Spark使用RDD实现分组topN(八种方法)
最近在复习Spark,记录一个使用RDD实现分组topN的方法,一共写了八种,其中有很多地方都是有共性的,我会在代码最后进行总结八种的思路,他们之间的共性以及每一种的优缺点. 以下是样例数据 语文,赵 ...
最新文章
- HDU1531(差分约束+Bellman_ford)
- springboot集成kaptcha 2.3.2
- 判断滚动条是否到达页面的尾部
- 目前我们所说的个人商用计算机属于,计算机组成原理试题库(大专生用,共20份,有答案)...
- server2003虚拟机损坏后的文件找回
- ProxySQL Getting started
- vim使用方法的总结摘自鸟哥的私房菜
- 中鸣机器人编程教程 c 语言,足球机器人编程(最好是图形化语言
- 安卓原生开机动画_安卓开机动画 74款
- 六道腾讯、百度、美团常爱问的面试智力题和答案
- 基于DLNA实现投屏的思路梳理
- 大气压力换算公式_压强单位bar,psi,pa,mpa,kg换算公式
- dubbo消费者调用报错Unsupported protocol rest in notified url
- github unable to access 'https://github.com/...: Failed to connect to github.com port 443‘
- Selenium IDE安装与运行
- 日志说明以及格式统一规范
- 使用Win 2003轻松建立森林间信任
- 安装威锋替换的镜像源
- Python中利用openpyxl对Excel的各种相关详细操作(二十一种常用操作<代码+示例>)
- mysql高级功能怎么开启_MySQL高级
热门文章
- vue webapp滑动事件_js_监听移动端web触屏事件_滑动响应
- 过滤html标签 去除html标签
- python如何确定拐点_如何确认均线拐点的实战技巧和理论(图解)
- php 文章修改怎么写,PHP开发文章发布系统之后台文章修改页面
- mysql recordcount 1_[转载]ADO记录集GetRecordCount()返回记录条数为啥总为-1
- matlab怎么画园与椭圆,[转载]【MATLAB】画圆和椭圆
- java exe 路径_Java程序获取执行自己的java.exe路径
- 暮色森林模组_《我的世界》暮色森林VS天启之境 到底谁才是冒险模组一哥
- 2020山东省计算机专科学校排名,2021山东专科学校排名 最好的高职院校排行榜
- kali锁屏后无法唤醒_看一下吧,自己对线程以及锁的概念和原理了解是否正确...