一.//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 八种方法相关推荐

  1. 提高IIS网站服务器的效率的八种方法 (转载)

    作者:未知  请作者速与本人联系 以下是提高IIS 5.0网站服务器的执行效率的八种方法: 1. 启用HTTP的持续作用可以改善15~20%的执行效率. 2. 不启用记录可以改善5~8%的执行效率. ...

  2. Linux下进程通信的八种方法

    Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...

  3. python管道安装包_Python 炫技操作:安装包的八种方法

    1. 使用 easy_install easy_install 这应该是最古老的包安装方式了,目前基本没有人使用了.下面是 easy_install 的一些安装示例# 通过包名,从PyPI寻找最新版本 ...

  4. 译 | 在 Azure SQL 上节约成本的八种方法

    点击上方关注"汪宇杰博客" 原文:John 'JG' Chirapurath 翻译:汪宇杰 导语 当今世界,企业正崭露头角,渴望重整与重建,但仍处于不确定的时期.节约成本并将开支重 ...

  5. MATLAB求解线性方程组的八种方法

    MATLAB求解线性方程组的八种方法 求解线性方程分为两种方法–直接法和迭代法 常见的方法一共有8种 直接法 Gauss消去法 Cholesky分解法 迭代法 Jacobi迭代法 Gauss-Seid ...

  6. Python炫技操作:花式导包的八种方法

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 五岳寻仙不辞远,一身好入名山游. ...

  7. HTTP之原理,长短连接,响应码,三握四挥,八种方法

    文章目录 1 HTTP原理 1.1 HTTP协议与TCP/IP协议的关系 1.2 无状态的HTTP协议 2 长短连接详解 2.1 简介 2.2 TCP短连接 2.3 TCP长连接 2.4 长连接短连接 ...

  8. 【fraud detection】防网络广告作弊(点击欺诈)的八种方法

    防网络广告作弊(点击欺诈)的八种方法 网络广告防作弊(点击欺诈)的技术手段有很多种,归纳起来,大致有以下八点: 1. IP防止作弊:一般计费方式是按照24小时内唯一IP,可以将每个IP记入数据库,当下 ...

  9. Spark使用RDD实现分组topN(八种方法)

    最近在复习Spark,记录一个使用RDD实现分组topN的方法,一共写了八种,其中有很多地方都是有共性的,我会在代码最后进行总结八种的思路,他们之间的共性以及每一种的优缺点. 以下是样例数据 语文,赵 ...

最新文章

  1. HDU1531(差分约束+Bellman_ford)
  2. springboot集成kaptcha 2.3.2
  3. 判断滚动条是否到达页面的尾部
  4. 目前我们所说的个人商用计算机属于,计算机组成原理试题库(大专生用,共20份,有答案)...
  5. server2003虚拟机损坏后的文件找回
  6. ProxySQL Getting started
  7. vim使用方法的总结摘自鸟哥的私房菜
  8. 中鸣机器人编程教程 c 语言,足球机器人编程(最好是图形化语言
  9. 安卓原生开机动画_安卓开机动画 74款
  10. 六道腾讯、百度、美团常爱问的面试智力题和答案
  11. 基于DLNA实现投屏的思路梳理
  12. 大气压力换算公式_压强单位bar,psi,pa,mpa,kg换算公式
  13. dubbo消费者调用报错Unsupported protocol rest in notified url
  14. github unable to access 'https://github.com/...: Failed to connect to github.com port 443‘
  15. Selenium IDE安装与运行
  16. 日志说明以及格式统一规范
  17. 使用Win 2003轻松建立森林间信任
  18. 安装威锋替换的镜像源
  19. Python中利用openpyxl对Excel的各种相关详细操作(二十一种常用操作<代码+示例>)
  20. mysql高级功能怎么开启_MySQL高级

热门文章

  1. vue webapp滑动事件_js_监听移动端web触屏事件_滑动响应
  2. 过滤html标签 去除html标签
  3. python如何确定拐点_如何确认均线拐点的实战技巧和理论(图解)
  4. php 文章修改怎么写,PHP开发文章发布系统之后台文章修改页面
  5. mysql recordcount 1_[转载]ADO记录集GetRecordCount()返回记录条数为啥总为-1
  6. matlab怎么画园与椭圆,[转载]【MATLAB】画圆和椭圆
  7. java exe 路径_Java程序获取执行自己的java.exe路径
  8. 暮色森林模组_《我的世界》暮色森林VS天启之境 到底谁才是冒险模组一哥
  9. 2020山东省计算机专科学校排名,2021山东专科学校排名 最好的高职院校排行榜
  10. kali锁屏后无法唤醒_看一下吧,自己对线程以及锁的概念和原理了解是否正确...