iOS中View和Layer的区别和联系

iOS中View和Layer的区别和联系,第1张

iOS中所有view都是用底层的layer来驱动的。view 和它的 layer 之间有着紧密的联系,view 其实直接从 layer 对象中获取了绝大多数它所需要的数据。在 iOS 中也有一些单独的 layer,比如 AVCaptureVideoPreviewLayer 和 CAShapeLayer ,它们不需要附加到 view 上就可以在屏幕上显示内容。两种情况下其实都是 layer 在起决定作用。当然了,附加到 view 上的 layer 和单独的 layer 在行为上还是稍有不同的。

UIView 相比 CALayer 最大区别是 UIView 可以响应用户事件,而 CALayer 不可以。 UIView 侧重于对显示内容的管理, CALayer 侧重于对内容的绘制。

万物归根, UIView 和 CALayer 的老祖都是 NSObjet 。

UIView的继承结构为: UIResponder : NSObject。

UIResponder 是用来响应事件的,也就是 UIView 可以响应用户事件。

CALayer 的继承结构为: NSObject 。

直接从 NSObject 继承,因为缺少了 UIResponder 类,所以 CALayer 不能响应任何用户事件。

CALayer 定义了 position 、 size 、 transform 、 animations 等基本属性。

UIView 可以响应事件, Layer 不可以

UIKit 使用 UIResponder 作为响应对象,来响应系统传递过来的事件并进行处理。 UIApplication 、 UIViewController 、 UIView 、和所有从 UIView 派生出来的 UIKit 类(包括 UIWindow )都直接或间接地继承自 UIResponder 类。

在 UIResponder 中定义了处理各种事件和事件传递的接口, 而 CALayer直接继承 NSObject ,并没有相应的处理事件的接口。

下面列举一些处理触摸事件的接口

js并不难学。\x0d\Js给人那种感觉的原因多半是因为它如下的特点:\x0d\A:本身知识很抽象、晦涩难懂,如:闭包、内置对象、DOM。\x0d\B:本身内容很多,如函数库、对象库就一大堆。\x0d\C:混合多种编程思想。它里面不但牵涉面向过程编程思想,又有面向对象编程思想,同时,它的面向对象还和别的编程语言(如:C++,JAVA,PHP)不大一样。就好像又是新的一样,让你对曾经学的面向对象产生了怀疑\x0d\D:辛苦学习后又看似和实际应用脱节。通常学了很久的js基础之后,变量、函数、对象你也都略知一二,但一到公司开发项目的时候,却又难以下手。因为公司在开发实际项目的时候通常都是直接用它的衍生库,如:jquery,angular,boostrap,amaze,layui,ueditor等,而这些库又多如牛毛,同时还有自己的难点。让你都不知道该学哪个好,甚至都怀疑自己学的是不是js了,好像有多个版本的js一样,总是学不完\x0d\\x0d\那么,怎么才能在js领域内学的轻松甚至游刃有余呢?我总结了一些实战意义的js学习经验:\x0d\1首先要紧紧抓住它的地位\x0d\时刻都不能忘记,否则很容易犯“一叶障目不见泰山”的错误。不要学了很久就知道js是编程语言,就是写代码,而且特点就是乱七八糟就完了,那样是学不好js的。要时时抓住它的地位,确切的说是它在整个Web中的地位:它属于前端的核心,主要用来 *** 控和重新调整DOM,通过修改DOM结构,从而来达到修改页面效果的目的。要用这个中心思想去指导后续的一切js的学习,并且形成条件反射。\x0d\\x0d\2要有一条清晰的学习路线\x0d\这个只能是过来人给你提供参考了。我的学习路线如下:\x0d\A:js基础部分,如:定义变量、函数、数组、字符串等的处理,内置函数、内置对象等;\x0d\B:js面向过程编程思想,封装出各个函数,试着用这些去做一些常见的小功能,如:选项卡、自定义多选按钮、自定义播放器、3D幻灯片;\x0d\C:js面向对象编程思想,试着去封装一些你自己的对象,提供出有意义的接口出来;\x0d\D:学了上述的内容,然后学常用的库,这里必须学jquery;\x0d\E:学基于jquery之上的常见插件,如:bootstrap,Layer,富文本编辑器等;\x0d\F:综合应用上面的多种库写实际项目的模板,多写几套。\x0d\\x0d\3从多角度去学习和领悟\x0d\充分调动你所学的东西,从多角度去做某一功能,如:以前你是从面向过程角度做的,现在改为从面向对象的角度再来做,或者继续做成可以直接使用的插件,提供属性、方法等出来。争取让你做的这个功能逐渐能使用到实际项目中来。这样的好处:既综合应用了你的所学,又能有实际意义。\x0d\\x0d\4注意培养信心\x0d\此时的你,不适合一来就看很复杂很炫的网页效果的源代码,也不适合一来就学jquery,angular,vue,bootstrap这些东西。这些内容包含了很多深奥的知识在里面,在没有任何基础的情况下直接学这些,会严重打击你的自信心。而此时你是弱小的,你需要的是培养信心,而不是反过来,否则结局很可能是“夭折”,离学有所成也就遥遥无期了。\x0d\\x0d\5多写总结\x0d\这种总结不但包括源代码、显示效果截图,还应该很容易犯的错误和对应的解决方法以及最后一两句精简的结论性语句。对自己写的总结不是写完了就了事了,要多回顾、多改进、多精简。到做项目的时候,应该是看里面的一两句话就知道是讲什么了,而不要再去看长篇大论了。\x0d\\x0d\6构建知识导图\x0d\这个可以让你越学越清晰,你可以按你喜欢的任何形式去做,只要自己印象深刻就行。\x0d\注意:知识导图也应该是经常修改、修正,让它更合理、更清晰。\x0d\学习编程知识,就来北京尚学堂,优秀的师资和多年的编程教育经验,会让你在学习的道路上快人一步。

答:layeriframe通过属性id传值——最近使用layer的d窗功能,在传参上遇到了问题。

有两种情况。

1 父页面给子页面传参;这个可以在url后拼接,比如testhtmla=1

2 父页面获取子页面 *** 作DOM;

回答完毕!

layer tree  分为 model layer tree(模型图层树) 、presentation layer tree(表示图层树) 、render layer tree(渲染图层树)

这三种图层树有什么作用呢?说到有啥作用,就不得不提Core Animation 核心动画了。因为这三个图层在核心动画中才能显示出它们的特点和用处。下面是官方文档的说明:

有没有感觉看了官方文档的说明还是有点点小懵逼的。那我就用我的理解再解释下。这三个图层在CALayer中可以使用的属性有两个,分别是: modelLayer (模型图层)、 presentationLayer (表现图层)。渲染图层在CALayer没有提供直接的属性给我们使用,是core Animation私有的。这里就不用说它了。

一说到"模型"大家第一反应是什么?是不是用来装数据用的,是不是会想到对象模型的概念。"模型图层" 其实就是这个作用,就是创建一个layer 然后给这个layer赋上你需要的数据。大家是不是在创建layer后,都会给生成的layer 赋值各种属性,通过这种赋值,有没感觉到这个layer本身就是modelLayer呢?那我告诉大家,必须的、必须的、必须的。重要的事情说三边。。。 layer = layermodelLayer (后面的栗子会证明这点)

"表现图层" 就是当前显示在屏幕上的图层。屏幕刷新时,就会调用presentationLayer。在core animation 动画中,可以通过这个属性,获取动画过程中每个时刻动画图层的数据,这样如果在动画过程中需要做什么处理,就可以动态的获取layer上相关的数据了。动画的过程中presentationLayer是时刻变化的,而modelLayer是不会变的。

使用basicAnimation 改变positionx的值

通过打印selfcontainerViewlayermodelLayer 和 selfcontainerViewlayerpresentationLayer的frame值对比:

第一组值:

layerpresentationLayerframe = {{ 15375329732894897 , 100}, {100, 467}}

layermodelLayerframe = {{1375, 100}, {100, 467}}

第二组值:

layerpresentationLayerframe = {{ 15470316648483276 , 100}, {100, 467}}

layermodelLayerframe = {{1375, 100}, {100, 467}}

第三组值:

layerpresentationLayerframe = {{ 17095646381378174 , 100}, {100, 467}}

layermodelLayerframe = {{1375, 100}, {100, 467}}

第四组值:

layerpresentationLayerframe = {{ 18573218822479248 , 100}, {100, 467}}

layermodelLayerframe = {{1375, 100}, {100, 467}}

第五组值:

layerpresentationLayerframe = {{ 20187994480133057 , 100}, {100, 467}}

layermodelLayerframe = {{1375, 100}, {100, 467}}

第六组值:

layerpresentationLayerframe = {{ 20441292762756348 , 100}, {100, 467}}

layermodelLayerframe = {{1375, 100}, {100, 467}}

通过六组值的观察,可以看出,动画一开始到结束,presentationLayer的frame一直在改变,而modelLayer的frame一直没变过,为什么presentationLayer的frame会发生变化呢?因为做动画的时候改变了layer的positionx值,position值的改变,会影响frame的值。

从这里我们就可以看出modelLayer 和 presentationLayer本质区别了,modelLayer 负责存储动画的目标值的模型对象。每当更改图层的属性时,它都会把数据存储下来 。当动画开始执行时,presentationLayer就上场了。屏幕上显示的就是presentationLayer,动画的过程中,你可以时刻访问动态变化的数据。例如:视频中的滚动d幕如果是使用layer做动画的,当d幕正在滚动时,你需要点击它以处理需要做的事情,这时候你就会需要presentationLayer。再结合hintTest方法来做判断:

从这个截图可以看出 selflayer = selflayemodelLayer 、 selflayer != selflayerpresentationLayer。 就是layer本身其实就是一个模型layer,只不过它拥有 presentationLayer。

CALayer是Core Animation的基础,layer tree更是Core Animation 核心动画执行过程中直接使用的对象,了解清楚layer的内在层级关系,才能更好的从细节上处理核心动画相关的事情。

1、使用时,把文件夹layer整个放置在您站点的任何一个目录,只需引入layerminjs即可,除jQuery外,其它文件无需再引入。

2、js引入是通过合并处理或者您不想采用layer自动获取的绝对路径,需要打开layerminjs去配置相对路径url。

您好,业务单元,又称业务处理对象,也可以简称业务对象,由多个业务组件和业务视图组件链接而成,UCML对传统的业务设计进行了全面的抽象,把一个业务单元的搭建过程分成数据对象(数据访问层)、业务组件、业务视图组件、业务处理对象四个步骤。

数据访问对象,DataLayer Access Object,简称数据对象,是对数据库的访问层。

业务组件,Business Component,简称BC,业务组件是建立在数据对象之上的、能实现业务需要的、可以被重用的业务逻辑。

业务视图组件,Business Visual Compoment,简称VC,是业务逻辑的展现部分。

业务单元,Business Unit,是一个独立的业务处理模块,它定义了一个业务处理的逻辑部分-业务组件,展现部分-业务视图组件,和业务处理逻辑,它由多个业务组件、多个视图组件链接而成。

wyer比较强调职业(profession),干这行的,受过训练可以提供法律咨询/意见的都叫lawyer

Attorney强调被委任(appointment),被授权可以代表委托人行事的叫attorney

Solicitor,主要是向委托人获取信息,准备文件,很少出庭;要出庭也大多只是在初级法院

lawyer 最一般的说法

attorney 美语里常用,且即可表示单个律师,也可以表示律师整体

solicitor 事务律师,与barrister对称

以上就是关于iOS中View和Layer的区别和联系全部的内容,包括:iOS中View和Layer的区别和联系、js学起来难吗、layeriframe通过属性id传值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10160611.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存