一、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. 在Android中使用Java 8的lambda表达式

    作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...

  2. centos7安装apue.3e时出错处理

    错误代码如下: /tmp/ccb9gvom.o: In function `thr_fn': barrier.c:(.text+0x6e): undefined reference to `heaps ...

  3. OpenLDAP与Apache

    1:安装部署Apache 2:在/var/www/html下,添加一个测试文件       echo test > index.html          3:在这之前,需了解Apache的账号 ...

  4. http2协议翻译(转)

    超文本传输协议版本 2 IETF HTTP2草案(draft-ietf-httpbis-http2-13) 摘要 本规范描述了一种优化的超文本传输协议(HTTP).HTTP/2通过引进报头字段压缩以及 ...

  5. 反汇编工具capstone安装后import error

    使用sudo pip install capstone后,使用如下代码import时出现error. from capstone import * 错误信息: File "/usr/loca ...

  6. Android 开发环境配置

    转至:http://www.cnblogs.com/shangdahao/archive/2013/04/17/3025429.html Windows下的开发环境需要安装以下软件: Java JDK ...

  7. oracle java SE

    http://www.oracle.com/technetwork/java/javase/downloads/index.html

  8. JavaWeb 学习003-简单登录页面功能实现

    先说下题外话:学习不是看你学了多久,重点是学到多少: 这就要求   效率.我在这三个小时,但是有效率的又有多久?只是做了这么一点简单的事. 登录页面 跟数据库交互,进行判断是否登陆成功.我只是实现了一 ...

  9. [问题记录.VisualStudio]VS2013无法新增和打开项目

    [问题描述] 1) 打开项目失败,报“项目文件只读”或“空引用”错误. 2) 无法新建项目,没有任何可用模板. 3) TFS都正常 [问题产生] 机器环境: 1) 装的Win10双系统,其中一个系统是 ...

  10. inotify resources exhausted

    inotify resources exhausted tail -f /var/log/kubelet.log tail: inotify resources exhausted tail: ino ...