一、UIView动画

//UIView动画有开始beginAnimation,有结束commitAnimation
    //第一步:开始UIView动画
    [UIView beginAnimations:@"标识ID(可随意命名)" context:nil];
    //第二步:设置动画时长
    [UIView setAnimationDuration:3];
    //第三步:设置UIView动画的回调代理
    [UIView setAnimationDelegate:self];
    //第四步:设置相关的对象的frame(或者color,alpha等属性)
    _testView.frame = CGRectMake(100, 100, 200, 100);

_testView.backgroundColor = [UIColor redColor];

_testView.alpha = 0.2;
    //第五步:结束动画(提交动画效果)
    [UIView commitAnimations];

第三步满足回调协议后走协议方法:

//开始动画时的方法
- (void)animationWillStart:(NSString *)animationID context:(void *)context {
    NSLog(@"ID = %@,context = %@", animationID, context);
}

//结束动画时的方法
- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    NSLog(@"ID = %@,context = %@", animationID, context);
}

二、CoreAnimation动画

1.layer的属性

#pragma mark - Layer的常用属性

    /*
//设置图片为圆角
self.imageView.layer.cornerRadius = self.imageView.frame.size.width / 2;
//注意:光设置上边一句代码是实现不了效果的(masksToBounds这个属性影响layer层的阴影效果,导致阴影不显示)
//允许改变角度
//self.imageView.layer.masksToBounds = YES; //设置layer的阴影颜色
self.imageView.layer.shadowColor = [UIColor redColor].CGColor;
//设置layer层的透明度
self.imageView.layer.shadowOpacity = 0.5f;
//设置阴影的偏移量
self.imageView.layer.shadowOffset = CGSizeMake(-20, 10);
//设置阴影的模糊度
self.imageView.layer.shadowRadius = 1.0f; //需求:拖进来一个UIView设置它的阴影
self.myView.layer.shadowColor = [UIColor blackColor].CGColor;
self.myView.layer.shadowOpacity = 1;
self.myView.layer.shadowOffset = CGSizeMake(20, 0);
//self.imageView.layer.shadowRadius = 3; */

layer常用属性

2.各种动画实现方法步骤

  • 声明方法名称
  • 赋给对应动画操作的keyPath
  • 设置动画操作需要的属性值
  • 将该动画操作添加给图片的layer进行操作
#pragma mark - CASpringAnimation动画按钮的响应方法
- (IBAction)springAnimation:(id)sender { CASpringAnimation *springAnimation = [CASpringAnimation animation]; springAnimation.keyPath = @"transform.scale";
springAnimation.fromValue = @;
springAnimation.toValue = @0.25;
springAnimation.duration = 3.0f;
[self.imageView.layer addAnimation:springAnimation forKey:@"springAnimation"]; } #pragma mark - CAAnimationGroup组动画按钮的响应方法
- (IBAction)animationGroup:(id)sender { //平移动画
CABasicAnimation *basicAnimation1 = [CABasicAnimation animation];
basicAnimation1.keyPath = @"transform.translation.y";
basicAnimation1.toValue = @(); //缩小动画
CABasicAnimation *basicAnimation2 = [CABasicAnimation animation];
basicAnimation2.keyPath = @"transform.scale";
basicAnimation2.toValue = @(0.2); //旋转动画
CABasicAnimation *basicAnimation3 = [CABasicAnimation animation];
basicAnimation3.keyPath = @"transform.rotation";
basicAnimation3.toValue = @(M_PI); //需要创建管理各个动画的动画组
CAAnimationGroup *group = [CAAnimationGroup animation];
group.animations = @[basicAnimation1, basicAnimation2, basicAnimation3];
group.duration = 5.0f; [self.imageView.layer addAnimation:group forKey:@"groupAnimation"]; } #pragma mark - CAKeyframeAnimation动画按钮的响应方法
- (IBAction)keyFrameAnimation:(id)sender { //第一步:创建对象
CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animation];
//第二步:设置动画轨迹
keyFrameAnimation.keyPath = @"transform.rotation";
//第三步:设置旋转角度(弧度的计算公式:度数/180*π)(π = M_PI)
keyFrameAnimation.values = @[@( / 180.0 * M_PI), @( / 180.0 * M_PI)];
keyFrameAnimation.repeatCount = ;
//第四步:设置时长
keyFrameAnimation.duration = 3.0f;
//第五步:添加动画到layer层
[self.imageView.layer addAnimation:keyFrameAnimation forKey:@"keyFrameAnimation"]; } #pragma mark - CABasicAnimation动画的响应方法
- (IBAction)basicAnimation:(id)sender { /***************移动效果***************/ //第一步:创建动画对象
CABasicAnimation *basicAnimation = [CABasicAnimation animation];
//第二步:告诉layer层需要执行什么样子的动画[后面设置的内容为CALayer的相关属性]
basicAnimation.keyPath = @"position";
//第三步:告诉layer从哪里来,到哪里去
basicAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(, )];
basicAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(, )];
//注意点:如果要实现移动到的位置不回到原来的位置,需要实现以下两句代码
basicAnimation.removedOnCompletion = NO;
//设置保存动画状态的内容
basicAnimation.fillMode = kCAFillModeForwards;
//第四步:设置动画持续时长
basicAnimation.duration = ;
//第五步:将要执行的动画添加到calayer上
[self.imageView.layer addAnimation:basicAnimation forKey:@"basic1"]; /***************翻转效果***************/
CABasicAnimation *basic = [CABasicAnimation animation];
basic.keyPath = @"transform";
//设置翻转到的地方
basic.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, , , )];
basic.duration = 2.0f;
[self.imageView.layer addAnimation:basic forKey:@"basic2"]; //根据key去除移除动画
// [self.imageView.layer removeAnimationForKey:@"basic1"]; }

iOS进阶_动画的多种实现方式的更多相关文章

  1. iOS进阶_地图上定位的标志——大头针

    一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大 ...

  2. iOS进阶_三方使用步骤

    一.配置环境(:后为在终端输入的命令) 打开终端 查看自己电脑的Ruby环境:gem sources -l 如果环境已经是淘宝镜像了,此时不需要再进行环境的修改. 如果不是,发送gem sources ...

  3. iOS进阶_地图定位

    一.定位步骤 1.Xcode自带地图,直接先引入头文件 #import <CoreLocation/CoreLocation.h> 2.CLLocation框架中的CLLocationMa ...

  4. iOS页面切换动画实现方式。

    iOS页面切换动画实现方式. 1.使用UIView animateWithDuration:animations:completion方法 Java代码 [UIView animateWithDura ...

  5. HTML5 动画效果的多种实现方式

    HTML5 动画效果的多种实现方式 1.  CSS3 transform + transition https://www.w3.org/TR/css-transforms-1/ https://ww ...

  6. ios 图片的两种加载方式

    控件加载图片,plist,懒加载,序列帧动画,添加动画效果. IOS中有2种加载图片的方式. 方式一:有缓存(图片所占用的内存会一直停留在程序中) + (UIImage *)imageNamed:(N ...

  7. IOS中的动画菜单

    SvpplyTable(可折叠可张开的菜单动画) 允许你简单地创建可折叠可张开的菜单动画效果,灵感来自于Svpply app.不同表格项目使用JSON定义,你可以定义每个菜单项和任何子菜单,为每个项目 ...

  8. iOS开发之动画编程的几种方法

    iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKe ...

  9. iOS学习——核心动画

    iOS学习——核心动画 1.什么是核心动画 Core Animation(核心动画)是一组功能强大.效果华丽的动画API,无论在iOS系统或者在你开发的App中,都有大量应用.核心动画所在的位置如下图 ...

随机推荐

  1. iOS架构基础

    1.概念:架构其实是一个设计上的东西,它可以小到类类之间的交互,可以大到不痛的模块之间,可以说不痛的业务部门之间的交互都可以从架构的层面去理解它. 2.解耦 方法一:代理 方法二:通知

  2. angularJS--ngSelect

    给select绑定ng-model时,经常会出现首选第一个option值是undefined.如图, 源代码 <select ng-model="newSupplier.company ...

  3. Light OJ 1031 - Easy Game(区间dp)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1031 题目大意:两个选手,轮流可以从数组的任意一端取值, 每次可以去任意个但仅 ...

  4. js的form基础知识点

    在HTML 中,表单是由<form>元素来表示的,而在JavaScript 中,表单对应的则是HTMLForm-Element 类型.HTMLFormElement 继承了HTMLElem ...

  5. (转)SQL Server 性能调优(cpu)

    摘自:http://www.cnblogs.com/Amaranthus/archive/2012/03/07/2383551.html 研究cpu压力工具 perfom SQL跟踪 性能视图 cpu ...

  6. 记录第一次搭建svn服务器

    搭建svn服务器需要另外的软件, 在此以32位的为例: 安装过程非常简单, 一直下一步下一步确定就好了, svn安装完毕再安装中文语言包, 安装完成后可以在设置里面找到中文简体选择就OK了 主要记录一 ...

  7. Windows XP SP3下成功编译CUint2.1-3

    软件环境:Visual C++ 6.0 操作系统:Windows XP SP3 从sourceforge.net下载CUint-2.1-3.tar.bz解压出目录CUnit-2.1-3 从CUint打 ...

  8. angular报$injector / unpr的错误

    原因:angular引用未定义的错误,因为JS代码压缩过后找不到申明的变量,,没在使用之前定义,且代码被压缩,则报错(变量压缩后会变成单个字母无法识别,需在引用前分别定义): 解决:angular.m ...

  9. 問題排查:类型“System.DateTime”的对象无法转换为类型“System.String”

    最近在擴充資料對接工具的功能 經常會遇到這個狀況 當然還有其他同類提示,例如 int/decimal 無法轉 System.String 等等 無獨有偶 這些錯誤幾乎都是在 DataTable 轉換成 ...

  10. 在本地创建angular-ui/bootstrap项目

    在本地创建完整的angular-ui/Bootstrap项目 git clone the repo, then switch to the tag you want,then use grunt bu ...