首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

图层树和寄宿图 -- iOS Core Animation 系列一

和UIView最大的区别是CALayer不能处理用户的操作交互 CALayer不清楚具体的响应链,但是它提供了一些方法来判断是否某个触点在某个图层范围内。...如果contentsScale设置为1.0,将会以每个点1个像素绘制图片,如果2.0,则以每个点2个像素绘制图片(这就是Retina屏)。...但是如果把contentsGravity设置成kCAGravityCenter(这个值不会拉伸图片),变化见下图: ? 如图所示,图片会变的有点大,而且有像素的颗粒感。...UIView有个clipsToBounds属性来决定是否显示超出边界的内容。CALayer对应的属性叫做maskToBounds,把它设置成YES就可以不显示超出部分的图片了。...这是因为我们在CALayerDelegate方法中,没有对超出边界歪的内容提供绘制支持。 除非创建一个单独的图层,我们平时基本不会用到CALayerDelegate。

1.2K20

绘图-CAShapeLayer、CABasicAnimation以及核心动画

LineWidth 是在边界上绘制的宽度,而且 绘制的宽度被边界一分为二。 #如果LineWidth 为0 ,strokeColor设置后也是没有效果的。...autoreverses -> 动画由初始值到最终值后,是否反过来回到初始值的动画。如果设置为YES,就意味着动画完成后会以动画的形式回到初始值。...removedOnCompletion -> 是否让图层保持显示动画执行后的状态,默认为YES,也就是动画执行完毕后从涂层上移除,恢复到执行前的状态,如果设置为NO,并且设置fillMode为kCAFillModeForwards...添加属性具体如下: keyPath -> CALayer的某个属性名,并通过这个属性的值进行修改,达到相应的动画效果。...如果你设置了path,那么values将被忽略 - keyTimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧.当keyTimes

2.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    View编程指南(三)

    如果view的内容完全不透明,则将此属性设置为YES,因此不会显示任何底层view的内容。 将此属性设置为YES可消除不必要的合成操作,从而提高性能。...如果您希望将subview剪裁到superview的边界,则必须明确地将superview的clipsToBounds属性设置为YES。...隐藏View 要以可视方式隐藏view,可以将其hidden属性设置为YES,也可以将其alpha属性更改为0.0。隐藏的view不会从系统接收触摸事件。...对于view层次结构中的每个view,将该view的autoresizingMask属性设置为适当的值是处理自动布局更改的重要部分。...此方法的默认实现返回CALayer类,更改此值的唯一方法是子类,重写该方法,并返回一个不同的值。 您可以更改此值以使用不同类型的图层。

    1.8K30

    iOS 事件处理机制与图像渲染过程

    比如一个动画是更改alpha值从0到1,那么在逻辑树上此属性会被立刻更新为最终属性1,而在动画树上会根据设置的动画时间从0逐步变化到1); 渲染树(其属性值就是当前正被显示在屏幕上的属性值); CADisplayLink...Timer 有个属性叫做 Tolerance (宽容度),标示了当时间点到后,容许有多少最大误差。如果某个时间点被错过了,例如执行了一个很长的任务,则那个时间点的回调也会跳过去,不会延后执行。...当一个触摸事件到来时,RunLoop 被唤醒,App 中的代码会执行一些操作,比如创建和调整视图层级、设置 UIView 的 frame、修改 CALayer 的透明度、为视图添加一个动画;这些操作最终都会被...iOS提供了Core Animation框架,只需要开发者提供关键帧信息,比如提供某个animatable属性终点的关键帧信息,然后中间的值则通过一定的算法进行插值计算,从而实现补间动画。...当它的属性(比如frame/transform)改变后,它并不会立刻同步到其持有的 view 或 layer 去,而是把被改变的属性保存到内部的一个中间变量,稍后在需要时,再通过某个机制一次性设置到内部的

    5.6K100

    【IOS开发进阶系列】动画专题

    但是如果我们把contentsGravity设置为kCAGravityCenter(这个值并不会拉伸图片),那将会有很明显的变化(如图2.3)  图2.3 用错误的contentsScale...UIView有一个叫做clipsToBounds的属性可以用来决定是否显示超出边界的内容,CALayer对应的属性叫做masksToBounds,把它设置为YES,雪人就在边界里啦~(如图2.5)...一个CAShapeLayer不需要像普通CALayer一样创建一个寄宿图形,所以无论有多大,都不会占用太多的内存。     •  不会被图层边界剪裁掉。一个CAShapeLayer可以在边界之外绘制。...而且由于CALayer不支持自动缩放和自动布局,子视图并不是主动跟踪视图边界的大小,所以每次视图大小被更改,我们不得不手动更新子图层的边界。        ...如果是一个动画CAAnimation,则需要将其removedOnCompletion设置为NO,要不然fillMode不起作用。下面来讲各个fillMode的意义。

    56810

    Core Animation总结

    如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards delegate 代理(animationDidStart、animationDidStop...它主要用于制作比较单一的动画,例如,平移、缩放、旋转、颜色渐变、边框的值的变化等,也就是将layer的某个属性值从一个值到另一个值的变化 CABasicAnimation属性 说明 fromValue...举个栗子,我们初始化一个view,它的状态为1,我们给它的layer加个动画,from是0,to是2,设置fillMode为kCAFillModeForewards,则动画结束后P的状态是2,M的状态是...只有在为最外层事务提交更改后,Core Animation才会开始关联的动画。...将重复计数设置为自动回转动画的整数(例如1.0)会导致动画停止在其起始值上。添加额外的半步(例如重复计数为1.5)会导致动画停止在其结束值上。

    1.3K10

    Core Animation实战二(寄宿图)

    CALayer直接设置寄宿图 // // LayerContentViewController.m // LayerStudyDemo // // Created by apple on...imageLayer.contentsGravity = kCAGravityResizeAspect; //contentsScale属性定义了寄宿图的像素尺寸和视图大小的比例,默认情况下它是一个值为...如果你尝试对我们的例子设置不同的值,你就会发现根本没任何影响。因为contents由于设置了contentsGravity属性,所以它已经被拉伸以适应图层的边界。...改变contentsCenter的值并不会影响到寄宿图的显示,除非这个图层的大小改变了,你才看得到效果。...)ctx;     在调用这个方法之前,CALayer创建了一个合适尺寸的空寄宿图(尺寸由bounds和contentsScale决定)和一个Core Graphics的绘制上下文环境,为绘制寄宿图做准备

    43830

    iOS面试题-UI篇

    UIView显示在屏幕上归功于CALayer,通过调用drawRect方法来渲染自身的内容,调节CALayer属性可以调整UIView的外观, UIView继承自UIResponder,比起CALayer...) layerClass { // 使某个UIView的子类使用GL来进行绘制 return ([CAEAGLLayer class]); } UIView的CALayer类似UIView...补充部分,这部分有深度了,大致了解一下吧,UIView的layer树形在系统内部被系统维护着三份copy 逻辑树,就是代码里可以操纵的,例如更改layer的属性等等就在这一份 动画树,这是一个中间层,系统正是在这一层上更改属性...loadView用来自定义view,只要实现了这个方法,其他通过xib或storyboard创建的view都不会被加载 看懂控制器view创建的这个图就行 [image] IBOutlet连出来的视图属性为什么可以被设置成...:设置目录,iCloud会备份设置信息 tmp:存放临时文件,不会被备份,而且这个文件下的数据有可能随时被清除的可能 pushViewController和presentViewController有什么区别

    2K21

    CALayer 图层概念二、CALayer属性二、方法

    @property CGPoint position; 称为 "定位点" / "锚点", 它的取值范围是0 ~ 1, 默认值为0.5....( border 边界) redView.layer.borderColor = [UIColor whiteColor].CGColor; 设置边框宽度 redView.layer.borderWidth...此处可以和UIView的clipToBounds来比较记忆(clipToBounds为yes会使其上的内容包括子视图不能超出边界) 控件截图裁剪的三种方法: 给layer设置圆角半径layer.cornerRadius...view的clipToBounds 裁剪多余边缘 设置photoView中的所有子控件如果超出了photoView的有效范围,那么超出的部分将不会显示 photoView.clipsToBounds...// 设置layer执行完毕动画后,不要回去 anim1.removedOnCompletion = NO; // 当核心动画执行完毕后不要从layer中移除 anim1.fillMode

    1.4K70

    iOS动画-CALayer基础知识

    的一层封装,我们在创建UIView时,其内部会自动创建CALayer图层对象(即UIView的关联图层),UIView调用drawRect:方法进行绘图,并且将所有的内容绘制到自己的图层上,绘制完毕后,...允许在图层边框里显示寄宿图的一个子域 contentCenter (CGRect) 定义一个固定的边框和一个在图层上可拉伸的区域 三、UIView方法绘制自定义寄宿图 给contents赋值CGImage的值并不是唯一设置寄宿图的方法...会创建了一个合适尺寸的空寄宿图(尺寸由bounds和contentScale决定)和一个Core Graphics的绘制上下文环境,为绘制寄宿图做准备,并将其以ctx参数传入。...主动绘制 我们需要显式的调用-display方法;这不同于UIView,当图层显示到屏幕上时,CALayer不会自动重绘它的内容,CALayer把重绘的决定权交给了开发者; 2.绘制特点 尽管没有使用...masksToBounds属性,但示例中绘制的视图依然被裁剪了,这是因为通过CALayer绘制寄宿图并没有对超出边界外的内容提供绘制支持; 3.设置代理 CALayerDelegate不能是UIView

    1.9K50

    iOS 页面渲染 - UIView & CALayer

    动画 基本上你改变一个单独的 layer 的任何属性的时候,都会触发一个从旧的值过渡到新值的简单动画,这就是所谓的隐式动画,其时长为 0.25s。...修改 bounds 更改 bounds 的位置,也就是 origin 属性,对于当前视图没有影响,相当于更改了当前视图的坐标系,对于子视图来说当前视图的左上角已经不再是 (0,0), 而是改变后的坐标,...更改 bounds 的大小,也就是 size 属性,修改长宽后,中心点继续保持不变, 长宽进行改变;通过 bounds 修改长宽看起来就像是以中心点为基准点对长宽两边同时进行缩放; 我们写个子看一下修改...AutoLayout 在完成布局后,所计算出来的位置和尺寸内部修改的值是 center 和 bounds 两个属性,因此最终的展示效果不会因为仿射变换而产生异常。...同时这也解释了为什么通过 AutoLayout 设置约束后修改 frame 属性来改变位置和尺寸不会起作用的原因。

    1.9K20

    CAAnimation 核心动画概念一、 CAAnimation二、 CAPropertyAnimation三、CABasicAnimation(基本动画)CAPropertyAnimation的子类

    Core Animation的动画执行过程是在后台操作的.不会阻塞主线程. 要注意的是, Core Animation是直接作用在CALayer上的.并非UIView。...如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode属性为kCAFillModeForwards fillMode:决定当前对象在非active时间段的行为.比如动画开始之前...比如,指定@”position”为keyPath,就修改CALayer的position属性的值,以达到平移的动画效果。...: keyPath相应属性的结束值,到某个固定的值(类似transform的make含义) 注意:随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue...,并没有真正被改变.比如: CALayer的postion初始值为(0,0),CABasicAnimation的fromValue为(10,10),toValue为 (100,100),虽然动画执行完毕后图层保持在

    2K90

    iOS Core Animation的用法

    Autoreverses 当你设定这个属性为 true 时,在它到达目的地之后,动画的返回到开始的值,代替了直接跳转到 开始的值。...它设定开始值到结束值花费的时间。期间会被速度的属性所影响。 RemovedOnCompletion 这个属性默认为 true,那意味着,在指定的时间段完成后,动画就自动的从层上移除了。...Speed 默认的值为 1.0.这意味着动画播放按照默认的速度。如果你改变这个值为 2.0,动画会用 2 倍的速度播放。 这样的影响就是使持续时间减半。...如果你指定的持续时间为 6 秒,速度为 2.0,动画就会播放 3 秒钟。 BeginTime 这个属性在组动画中很有用。它根据父动画组的持续时间,指定了开始播放动画的时间。...不会被图层边界剪裁掉。 一个CAShapeLayer可以在边界之外绘制。 你的图层路径不会像在使用Core Graphics的普通CALayer一样被剪裁掉。 不会出现像素化。

    1.4K30

    视觉效果 -- iOS Core Animation 系列三

    CALayer有一个conrnerRadius的属性控制图层的圆角曲率,默认值为0。这个曲率值默认只影响背景颜色而不影响背景图片或者子图层。可以用过下面的示例看一下。...通过上面的示例可以发现: 只设置cornerRadius时,默认情况下,只影响背景颜色,而不影响背景图片或者子图层。 如果想要截取这个视图的图片和子视图,需要设置masksToBounds为YES。...shadowOpacity属性控制阴影透明度的,它是一个在0.0和1.0之间的浮点数,如果设置为1.0将会显示一个轻微模糊的阴影。...shadowRadius属性控制着阴影的模糊度,当值为0的时候,阴影和视图一样有一个明显的边界,值越大,边界线看起来就会越模糊。...我们可以在info.plist文件中添加UIViewGroupOpacity并设置成YES来打到这个效果。还有一种方法就是对CALayer进行设置。

    1.1K30

    CALayer 实用属性补充

    为方便对CALayer的学习,特记录以下内容,整理自ios核心动画高级技巧 · GitBook (墙裂推荐阅读此翻译文档)  contents 属性 这个属性的类型被定义为id(这是由于MacOSX...kCAGravityResizeAspectFill  contentsScale 这个属性是浮点类型,默认值为1.0,它定义了像素尺寸和视图大小的比例(类似于分辨率,UIView相似功能的属性是contentScaleFactor...如果设置了contentsGravity属性为kCAGravityResizeAspect(拉伸)时,将会忽略contentsScale,因为拉伸图片适应图层时,根本不会考虑分辨率问题。...contentsScale maskToBounds 默认情况下,UIView会绘制超过边界的内容或子视图,CALayer也一样。...UIView有一个叫做clipsToBounds属性可以用来决定是否显示超出边界的内容,CALaer对应的属性是maskToBounds,设置为YES,会剪去超出边界的部分(不显示)。

    94830

    老司机带你走进Core Animation 之粒子发射、TileLayer与异步绘制

    cell.lifetime = 1; cell.birthRate = 1; cell.velocity = 1; cell.scale = 1; cell.spin = 1; ///一些属性的改变速率,设置了对应值后...轴运动方向的加速度,相似的还有xAcceleration,通常用来模拟重力加速度,产生粒子坠落的效果 cell.yAcceleration = 100; self.cell = cell; ///初始化cell后将其放在容器内...但是Layer捕捉到需要做的改变后并不会立即去刷新,而是寻找一个合适的实际去进行刷新。...而后就是将无关的计算移到子线程中计算并在context中绘制,最后从context中取到绘制的图片,将其设置为layer的Contents进而展示画面。...应用这一特性,设置Layer持有一个基本数据类型的计数量,用一个临时变量存储及数量后,block中比较临时变量与layer持有的计数量的值,因为临时变量是被copy走的,不会随外界改变,所以当外界改变时

    97520

    iOS-核心动画详解之CALayer

    1为不透明,0为透明 _RedView.layer.shadowOpacity = 1; //设置阴影的偏移量 self.imageV.layer.shadowOffset = CGSizeMake(-...= [UIColor whiteColor].CGColor; 3.3 设置图片的圆角半径 //我们设置的所有layer的属性只作用在根层上,根层设置为圆形后,其上面的图片并不会改变,因此需要裁剪。...>这两个属性是配合使用的. position:它是用来设置当前的layer在父控件当中的位置的.所以它的坐标原点.以父控件的左上角为(0.0)点. anchorPoint:它是决点CALayer身上哪一个点会在...两者结合使用.想要修改某个控件的位置,我们可以设置它的position点. 设置完毕后.layer身上的anchorPoint会自动定到position所在的位置. !...** 很多操作绑定在一起,当这些操作执行完毕后,才去执行下一个操作.

    2K60
    领券