一、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. Java线程的5个使用技巧

    萝卜白菜各有所爱.像小编我就喜欢Java.学无止境,这也是我喜欢它的一个原因.日常工作中你所用到的工具,通常都有些你从来没有了解过的东西,比方说某个方法或者是一些有趣的用法.比如说线程.没错,就是线程 ...

  2. iOS常用网络库之AFNetWorking

    简介 ​     `AFNetworking`是iOS开发网络API中最常用的第三方库,`github`中的`star`数充分说明了它在iOS开发中第三方库中的江湖地位  github地址:[AFNe ...

  3. python 识别图片验证码报IOError

    说一下困扰了我一周的问题:识别图片验证码 本来我按照安装步骤(http://www.cnblogs.com/yeayee/p/4955506.html?utm_source=tuicool&u ...

  4. java_method_下载导入模版

    //调用方法 upDown.download(request, response, request.getRealPath("")+"/output/BlackNumbe ...

  5. POJ3020 匹配

    题目大意:给定一地图,*可以和相邻的*匹配成一对儿,问最少需要对儿匹配才能使所有*都被匹配到. 很直白的最小点覆盖,即ans = 点集数-最大匹配数. 不过一开始要对图进行遍历得到点集,找到一个*就把 ...

  6. python学习之——eclipse+pydev 环境搭建

    最终选用 eclipse+pydev,网上相关资料也是极多的~~~ 1.安装python: 2.安装eclipse: 3.eclipse中安装pydev,eclipse中help—>eclipl ...

  7. 合并两个排好序的链表(c++)

    #include<iostream> struct node{ int payload; node* next; node(int payload){this->payload=pa ...

  8. 准备开发一款开源NES模拟器

    前几天无意见看到一些NES的开发资料,勾起了小时候暑假的无数美好回忆,做为一名码农,萌发了自己写一款模拟器的想法.一来可以加深自己对整个系统/游戏的理解,一来可以实现小时候的梦想:),希望可以坚持下来 ...

  9. MongoDB的TruncationException异常解决方法

    近期由于DB4O的一些无解的BUG,导致现行的项目查询效率底下,于是愤而迁移到了MongoDB. MongoDB虽然比DB4O的用户要多一些,但是文档依然极度匮乏,遇到问题不是那么容易就能搜到解决办法 ...

  10. OPENWRT开始SFTP支持办法

    root@OpenWrt:~# opkg update root@OpenWrt:~# opkg install vsftpd openssh-sftp-server root@OpenWrt:~# ...