动画

OC动画:CAAnimationGroup

余生长醉 提交于 2020-04-04 20:35:25
//贝塞尔曲线路径 UIBezierPath *movePath = [UIBezierPath bezierPath]; [movePath moveToPoint:CGPointMake(10.0, 10.0)]; [movePath addQuadCurveToPoint:CGPointMake(100, 300) controlPoint:CGPointMake(300, 100)]; //以下必须导入QuartzCore包   //关键帧动画(位置) CAKeyframeAnimation * posAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; posAnim.path = movePath.CGPath; posAnim.removedOnCompletion = YES; //缩放动画 CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"]; scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; scaleAnim.toValue = [NSValue

隐式动画和核心动画

旧巷老猫 提交于 2020-04-04 18:53:33
1. 隐式动画,只有非根层的CALayer才有隐式动画,即改变图层的属性的时候,比如大小,颜色等,会自动添加一个颜色效果, 根层:控件里面的CALayer 非根层:自己创建的CALayer,不依附控件存在的CALayer 隐式动画的使用场景不多 2. 核心动画: Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能。Core Animation可以用在Mac OS X和iOS平台。Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。 要注意的是,Core Animation是直接作用在CALayer上的,并非UIView。CALayer中很多属性都可以通过CAAnimation实现动画效果,包括:opacity、position、transform、bounds、contents等,通过调⽤用CALayer的addAnimation:forKey增加动画到层(CALayer)中,这样就能触 发动画了。 CAAnimation的继承结构如下: 注意: 这个核心动画仅仅是一个效果,动画结束之后并不保存动画结束之后的值,要想保存动画结束之后的值,两种方案 1.使用animationstop方法(CAAnimation的代理方法)

图层与核心动画

我们两清 提交于 2020-04-04 18:52:47
一、理解图层与UIView的关系 1.UIView能显示在屏幕上,是因为里面有个图层,UIView的DrawRect方法,会将绘制的东西绘在图层上,当要显示的时候,将图层拷贝到屏幕上进行显示 二、CALayer的基本属性 1.尺寸(bounds) 2.背影颜色(backgroundColor) 3.位置(position) 4.边框颜色(borderColor)、边框长度(borderWidth) "配合使用才有效果" 5.圆角(cornerRadius) 6.内容对象(contents) 通常设置图片, *如果要显示圆角效果,必须设置图层的masksToBounds为YES,意思是把多余的剪切掉 7.阴影属性 *阴影颜色(shadowColor)、阴影透明度(shadowOpacity) "要配合使用才有效果" *阴影起始位置(shadowOffset) *如果图片添加了圆角并设置了剪切掉多余的部分,阴影效果不会出现 *如果又想图片有圆角效果,又想有阴影,那图片只能是本来就有圆角效果的,不用代码设置 8. transform(CATransform3D)属性 *缩放CATransform3DMakeScale *旋转CGAffineTransformMakeRotation,理解xyz方向的意思 *平移CATransform3DMakeTranslation

核心动画与UIView

て烟熏妆下的殇ゞ 提交于 2020-04-04 18:51:52
UIView与核心动画区别?(掌握) 1.核心动画只作用在layer. 2.核心动画看到的都是假像,它并没有去修改UIView的真实位置. 什么时候使用核心动画? 1.当不需要与用户进行交互,使用核心动画 2.当要根据路径做动画时,使用核心动画:CABasicAnimation,CAKeyFrameAnimation,两个都可以根据绘制的路径UIBizerPath来绘制路径来执行动画 3.当做转场动画时, 使用核心动画 (核心动画转场类型比较多)CATrasition或是UIView的核心动画 UIView封装的动画与CALayer动画的对比 使用UIView和CALayer都能实现动画效果,但是在真实的开发中,一般还是主要使用UIView封装的动画,而很少使用CALayer的动画。 CALayer核心动画与UIView动画的区别: UIView封装的动画执行完毕之后不会反弹。即如果是通过CALayer核心动画改变layer的位置状态,表面上看虽然已经改变了,但是实际上它的位置是没有改变的。 来源: https://www.cnblogs.com/dannygao/p/7088349.html

11-UIView与核心动画对比

こ雲淡風輕ζ 提交于 2020-04-04 18:50:48
/*--> */ /*--> */ 11.UIView与核心动画对比? 1.UIView和核心动画区别? 核心动画只能添加到CALayer 核心动画一切都是假象,并不会改变真实的值。 2.什么时候使用UIView的动画? 如果需要与用户交互就使用UIView的动画. 不需要与用户交互可以使用核心动画 3.什么场景使用核心动画最多? 在转场动画中,核心动画的类型比较多 根据一个路径做动画,只能用核心动画(帧动画) 动画组:同时做多个动画 来源: https://www.cnblogs.com/zhoudaquan/p/5054882.html

UIView与核心动画对比?

﹥>﹥吖頭↗ 提交于 2020-04-04 18:49:37
1.UIView和核心动画区别? 核心动画只能添加到CALayer 核心动画一切都是假象,并不会改变真实的值。 2.什么时候使用UIView的动画? 如果需要与用户交互就使用UIView的动画. 不需要与用户交互可以使用核心动画 3.什么场景使用核心动画最多? 在转场动画中,核心动画的类型比较多 根据一个路径做动画,只能用核心动画(帧动画) 动画组:同时做多个动画 来源: https://www.cnblogs.com/xufengyuan/p/7044640.html

iOS开发UI篇—核心动画(转场动画和组动画)

我们两清 提交于 2020-04-04 18:48:25
一、转场动画简单介绍 CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少一点 UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果 属性解析: type:动画过渡类型 subtype:动画过渡方向 startProgress:动画起点(在整体动画的百分比) endProgress:动画终点(在整体动画的百分比) 二、转场动画代码示例 1.界面搭建 2.实现代码 1 // 2 // YYViewController.m 3 // 13-转场动画 4 // 5 // Created by apple on 14-6-21. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYViewController.h" 10 11 @interface YYViewController () 12 @property(nonatomic,assign) int index; 13 @property (weak, nonatomic) IBOutlet UIImageView *iconView; 14 15 - (IBAction)preOnClick:

移动端动画使用transform提升性能

若如初见. 提交于 2020-04-04 07:51:07
在移动端做动画,对性能要求较高 而通常的改变margin属性是性能极低的,即使使用绝对定位改变top,left这些属性性能也很差 因此应该使用transform来进行动画效果,如transform:translateX(100px) 原理: 首先,浏览器绘制 DOM 的过程是这样子的: 获取 DOM 并将其分割为多个层(layer) 将每个层独立地绘制进位图(bitmap)中 将层作为纹理(texture)上传至 GPU 复合(composite)多个层来生成最终的屏幕图像。 left/top/margin 之类的属性会影响到元素在文档中的布局,当对布局(layout)进行动画时,该元素的布局改变可能会影响到其他元素在文档中的位置,就导致了所有被影响到的元素都要进行重新布局,浏览器需要为整个层进行重绘并重新上传到 GPU,造成了极大的性能开销。 transform 属于合成属性(composite property),对合成属性进行 transition/animation 动画将会创建一个合成层(composite layer),这使得被动画元素在一个独立的层中进行动画。通常情况下,浏览器会将一个层的内容先绘制进一个位图中,然后再作为纹理(texture)上 传到 GPU,只要该层的内容不发生改变,就没必要进行重绘(repaint),浏览器会通过重新复合(recomposite

CSS动画的性能分析和浏览器GPU加速

十年热恋 提交于 2020-04-04 07:50:24
此文已由作者袁申授权网易云社区发布。 欢迎访问 网易云社区 ,了解更多网易技术产品运营经验。 有数的数据大屏可以在一块屏幕上展示若干张不同的图表,以炫酷的方式展示各种业务数据。其中有些图表使用CSS实现了饼图轮播、地图标记点闪烁等动画,然而在一张大屏上同时显示了许多张图表时,持续的动画效果有时会出现掉帧、卡顿的情况,需要对动画性能进行优化。本文简单介绍了chrome浏览器性能分析工具和CSS动画使用GPU加速进行性能优化的解决方案。 浏览器渲染流程 这是浏览器渲染引擎的处理过程: 接收到文档后,渲染引擎会对HTML文档进行解析生成DOM树、对CSS文件进行解析生成CSSOM树;同时执行页面中的JavaScript代码;最终根据DOM树和CSSOM树,计算样式(Caluclate Style)生成渲染树,渲染树中,只会包含即将显示在页面中的元素及其样式信息(如head元素、display为hidden的元素就不会包含在渲染树中);根据渲染树需要进行布局(layout)来计算每个元素在页面上的位置; 接下来渲染引擎开始进行绘制(paint),这一步分为若干阶段:根据渲染树将每层(layer)的各个元素绘制,然后将绘制出的若干连续图像进行栅格化(Rasterization),最后将栅格化后的图像合成(composite)为要显示在屏幕上的图像。对每一层的绘制是由浏览器来完成的

GPU硬件加速原理 /转

本小妞迷上赌 提交于 2020-04-04 07:49:43
现代浏览器大都可以利用GPU来加速页面渲染。每个人都痴迷于60桢每秒的顺滑动画。在GPU的众多特性之中,它可以存储一定数量的纹理(一个矩形的像素点集合)并且高效地操作这些纹理(比如进行特定的移动、缩放和旋转操作)。这些特性在实现一个流畅的动画时特别有用。浏览器不会在动画的每一帧都绘制一次,而是生成DOM元素的快照,并作为GPU纹理(也被叫做层)存储起来。之后浏览器只需要告诉GPU去转换指定的纹理来实现DOM元素的动画效果。这就叫做 GPU合成 ,也经常被称这种借助于显卡的优势改变渲染操作:通常被笼统的称为“硬件加速(hardware acceleration)”。 “注”:fps:帧/秒(frames per second)的缩写,也称为帧速率。是指1秒钟时间里刷新的图片的帧数 GPU(Graphic Processing Unit,图形处理器)。GPU是相对于CPU的一个概念,由于在现代的计算机中图形的处理变得越来越重要,需要一个专门的图形的核心处理器。在浏览器中用css开启硬件加速,使GPU发挥功能。CSS animations, transforms 以及 transitions 不会自动开启GPU加速,而是由浏览器的缓慢的软件渲染引擎来执行。那我们怎样才可以切换到GPU模式呢,很多浏览器提供了某些触发的CSS规则。现在,像Chrome, FireFox, Safari,