iOS进阶_动画的多种实现方式
一、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进阶_动画的多种实现方式的更多相关文章
- iOS进阶_地图上定位的标志——大头针
一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大 ...
- iOS进阶_三方使用步骤
一.配置环境(:后为在终端输入的命令) 打开终端 查看自己电脑的Ruby环境:gem sources -l 如果环境已经是淘宝镜像了,此时不需要再进行环境的修改. 如果不是,发送gem sources ...
- iOS进阶_地图定位
一.定位步骤 1.Xcode自带地图,直接先引入头文件 #import <CoreLocation/CoreLocation.h> 2.CLLocation框架中的CLLocationMa ...
- iOS页面切换动画实现方式。
iOS页面切换动画实现方式. 1.使用UIView animateWithDuration:animations:completion方法 Java代码 [UIView animateWithDura ...
- HTML5 动画效果的多种实现方式
HTML5 动画效果的多种实现方式 1. CSS3 transform + transition https://www.w3.org/TR/css-transforms-1/ https://ww ...
- ios 图片的两种加载方式
控件加载图片,plist,懒加载,序列帧动画,添加动画效果. IOS中有2种加载图片的方式. 方式一:有缓存(图片所占用的内存会一直停留在程序中) + (UIImage *)imageNamed:(N ...
- IOS中的动画菜单
SvpplyTable(可折叠可张开的菜单动画) 允许你简单地创建可折叠可张开的菜单动画效果,灵感来自于Svpply app.不同表格项目使用JSON定义,你可以定义每个菜单项和任何子菜单,为每个项目 ...
- iOS开发之动画编程的几种方法
iOS开发之动画编程的几种方法 IOS中的动画总结来说有五种:UIView<block>,CAAnimation<CABasicAnimation,CATransition,CAKe ...
- iOS学习——核心动画
iOS学习——核心动画 1.什么是核心动画 Core Animation(核心动画)是一组功能强大.效果华丽的动画API,无论在iOS系统或者在你开发的App中,都有大量应用.核心动画所在的位置如下图 ...
随机推荐
- swt controls里的控件list
swt controls里的控件list,怎么显示滚动条,并且滚动条自动移动到最下边时,显示最新内容 package com.jokul; import org.eclipse.swt.widgets ...
- 谷歌Java编程规范
Google Java编程风格指南 January 20, 2014 作者:Hawstein 出处:http://hawstein.com/posts/google-java-style.html 声 ...
- iOS常用网络库之AFNetWorking
简介 `AFNetworking`是iOS开发网络API中最常用的第三方库,`github`中的`star`数充分说明了它在iOS开发中第三方库中的江湖地位 github地址:[AFNe ...
- jqGrid的选中行事件
http://blog.csdn.net/u014381863/article/details/50375121
- [题解]vijos 运输计划
Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家 ...
- ELK日志管理之——logstash配置语法
Logstash 设计了自己的 DSL -- 有点像 Puppet 的 DSL,或许因为都是用 Ruby 语言写的吧 -- 包括有区域,注释,数据类型(布尔值,字符串,数值,数组,哈希),条件判断,字 ...
- JavaScript 详说事件机制之冒泡、捕获、传播、委托
DOM事件流(event flow )存在三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会 ...
- 关于imagic拼接透明背景图片的问题
目标: 为了做图片水印,需要水平拼接多个logo和文字... 之前用过imagick,所以继续使用. 第一个版本:实现了图片和文字的拼接,代码如下: package main import ( &qu ...
- Nginx-->基础-->理论-->001:Nginx基本介绍
一.nginx基本介绍 传统上基于进程或者线程模型架构的web服务通过每进程或者每线程处理并发连接请求,这势必毁在网络和I/O操作时产生阻塞,其另外一个必然结果则是对内存和CPU的利用率低下,产生一个 ...
- HTTP Client工具类
HTTP Client工具类: import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.ht ...