图层和视图层的知识总结

图层就是我们所说的CALayer层,视图就是我们所说的UIView层。

UIView有三个比较重要的布局属性:frame,bounds和center,CALayer对应地叫做frame,bounds和position。为了能清楚区分,图层用了“position”,视图用了“center”,但是他们都代表同样的值。

对于视图或者图层来说,frame并不是一个非常清晰的属性,它其实是一个虚拟属性,是根据bounds,position和transform计算而来,所以当其中任何一个值发生改变,frame都会变化。相反,改变frame的值同样会影响到他们当中的值

有一个一直以来的误区:frame的宽高和bounds的宽高始终都是一致的。

实际上当对图层做变换的时候,比如旋转或者缩放,frame实际上代表了覆盖在图层旋转之后的整个轴对齐的矩形区域,也就是说frame的宽高可能和bounds的宽高不再一致了

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

锚点:

视图的center属性和图层的position属性都指定了anchorPoint相对于父图层的位置。图层的anchorPoint通过position来控制它的frame的位置,你可以认为anchorPoint是用来移动图层的把柄。 默认来说,anchorPoint位于图层的中点,所以图层的将会以这个点为中心放置。anchorPoint属性并没有被UIView接口暴露出来,这也是视图的position属性被叫做“center”的原因。但是图层的anchorPoint可以被移动,比如你可以把它置于图层frame的左上角,于是图层的内容将会向右下角的position方向移动(图3.3),而不是居中了。

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

三维坐标系:

和UIView严格的二维坐标系不同,CALayer存在于一个三维空间当中。除了我们已经讨论过的position和anchorPoint属性之外,CALayer还有另外两个属性,zPosition和anchorPointZ,二者都是在Z轴上描述图层位置的浮点类型。

zPosition的实际应用:

除了可以在三维空间移动和旋转图层,最实用功能就是改变图层的显示顺序了。

self.greenView.layer.zPosition = 1.0f;

可以通过这样的设置就可以使该视图在比它的zPosition小的视图的前面显示。

其实并不需要增加太多,视图都非常地薄,所以给zPosition提高一个像素就可以让绿色视图前置,当然0.1或者0.0001也能够做到,但是最好不要这样,因为浮点类型四舍五入的计算可能会造成一些不便的麻烦。

但是需要注意的是:

zPosition属性可以明显改变屏幕上图层的顺序,但不能改变事件传递的顺序

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

触摸事件的处理:

CALayer并不关心任何响应链事件,所以不能直接处理触摸事件或者手势。但是它有一系列的方法帮你处理事件:-containsPoint:和-hitTest:。

CALayer *layer = [self.layerView.layer hitTest:point];

使用这个方法就可以得到在一个图层上被触摸的图层;

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

图层的阴影的设置:

shadowOpacity:默认值为0,设置大于0,阴影就可以显示在任意图层之下。shadowOpacity是一个必须在0.0(不可见)和1.0(完全不透明)之间的浮点数。如果设置为1.0,将会显示一个有轻微模糊的黑色阴影稍微在图层之上。若要改动阴影的表现,你可以使用CALayer的另外三个属性:shadowColor,shadowOffset和shadowRadius。

shadowColor:阴影的颜色,一般黑色用得比较多,也是CGColorRef类型的。

shadowOffset:属性控制着阴影的方向和距离。它是一个CGSize的值,宽度控制这阴影横向的位移,高度控制着纵向的位移。shadowOffset的默认值是 {0, -3},意即阴影相对于Y轴有3个点的向上位移。

shadowRadius:属性控制着阴影的模糊度,当它的值是0的时候,阴影就和视图一样有一个非常确定的边界线。当值越来越大的时候,边界线看上去就会越来越模糊和自然。苹果自家的应用设计更偏向于自然的阴影,所以一个非零值再合适不过了

shadowPath属性:使用来进行对图层的阴影进行裁剪的路径,shadowPath是一个CGPathRef类型(一个指向CGPath的指针)。CGPath是一个Core Graphics对象,用来指定任意的一个矢量图形。我们可以通过这个属性单独于图层形状之外指定阴影的形状。

用法:

CGMutablePathRef circlePath = CGPathCreateMutable();
CGPathAddEllipseInRect(circlePath, NULL, self.layerView2.bounds);
self.layerView2.layer.shadowPath = circlePath;

CGPathRelease(circlePath);

时间: 2024-08-26 06:47:41

图层和视图层的知识总结的相关文章

说说视图层架构

前言 最近在思考关于iOS视图架构的一些东西,于是开始纠结MVC.MVVM等架构.由于项目里原来的代码比较乱,日积月累,维护的人也换了又换,可以说到了十分臃肿难以维护的地步.所以借某个机会得以对其进行重新设计.项目里的业务逻辑比较多,也比较乱.所以必须把架构做好,以方便后期的维护. 说回视图层架构,这阵子参考了很多资料,包括MVC.MVVM等,每个人的说法都不完全一致.只有一种解释,那就是架构模式不是一层不变的,而是在不断发展的,正如项目也在发展,项目的代码也在重构.所以,这篇文章谈到的不一定是

微信小程序开发教程(八)视图层——.wxml详解

框架的视图层由WXMKL(WeiXin Markup language)与WXSS(WeiXin Style Sheet)编写,由组件进行展示. 对于微信小程序而言,视图层就是所有.wxml文件与.wxss文件的集合. 微信小程序在逻辑层将数据进行处理后发送给视图层展现出来,同时接受视图层的事件反馈. ? .wxml文件用于描述页面的结构. ? .wxss文件用于描述页面的样式. 视图层以给定的样式展现数据并将时间反馈给逻辑层,而数据展现是以组件来进行的.组件(Component)是视图的基本单

djano-模板层基础知识

########模板层######## 模板层其实就是templates文件夹里的html文件 其实这里的每个html不是真正意义的上html代码,只有经过模板渲染过后才算的上真正的html页面. 一.模板语言(变量,深度查询,过滤器,标签) 1.变量 在django模板里通过{{ name }} 表示一个变量,name就是一个变量名 首先我们要明白这个变量是怎么传出来的, 在视图层: return render(request,'index.html',local()) #local()就把当

Python之路【第二十八篇】:django视图层、模块层

1.视图函数 文件在view_demo 一个视图函数简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以.无论视图本身包含什么逻辑,都要返回响应.代码写在哪里也无所谓,只要它在你的Python目录下面.除此之外没有更多的要求了——可以说“没有什么神奇的地方”.为了将代码放在某处,约定是将视图放置在项目或应用程序目录中的名为views.py的文件中. 视图

肆拾陆 ---django视图层与模板层

django视图层与模板层 一.视图层 1.1 HttpResponse.render.redirect ? HttpResponse:返回字符串: ? redirect:重定向 ? render:返回一个html页面,也可以给模板传值 ? render的逻辑原理: from django.template import Template,Context def index(request): res = Template('<h1>{{ user }} </h1>') con =

1126 视图层与模板层

目录 昨日内容回顾 一. 视图层 路由配置主页与404 1. 三大板斧 HTTPresponse render redirect 2. JsonResponse对象 基础 json转码 使用JsonResponse直接return safe序列化字典之外 3. FBV与CBV 定义 CBV 装饰器 4. request对象 二. 模板层 1. 常用语法 2. 变量 3. 模板传值 方法locals() 类型 函数 类 4. 过滤器| 定义 语法 常见内置filter 使用 前后端的取消转义 5.

微信小程序开发教程(九)视图层——.wxss详解

WXSS是一套样式语言,用于描述WXML的组件样式. 官方文档表示,WXSS的选择器目前支持(".class"."#id"."elemnt"."element,element"."::after"."::before"),而且本地资源无法通过WXSS获取,所以WXSS中的样式都是用的网络图片,或者base64. 好在微信团队提供的WXSS具有CSS大部分特性.同时为了更适合开发微信小程序

{{view 视图层}}微信小程序

微信小程序 view 视图层//自学 1.数据绑定 数据绑定 WXML中的动态数据均来自对应Page的data. 简单绑定 数据绑定使用"Mustache"语法(双大括号)将变量包起来,可以作用于: 内容 <view> {{ message }} </view> Page({ data: { message: 'Hello MINA!' } }) 组件属性(需要在双引号之内) <view id="item-{{id}}"> <

【Django】 视图层说明

[Django视图层] 视图层的主要工作是衔接HTTP请求,Python程序和HTML模板,使他们能够有机互相合作从模型层lou到数据并且反馈.说到视图层的工作就有以下几个方面要说 ■ URL映射 对于一般的,通过django.conf.urls.url设置url路径,并且关联视图函数,甚至把url方法的参数写成正则表达式从而可以给视图函数传递多个参数的事情就不多说了.比如: url(r'^single/([0-9]{4})/([0-9]{2})/([0-9]+)/$',views.single