View programming guide decument







view实际上就是一个在 application的key window上的UIView的实例,是一个方形的视图。View主要负责以下几点的工作:
  1. 绘制内容:通过Core Graphics、OpenGL ES或者UIKit框架机制来实现基础图形绘制。
  2. 触摸事件响应:响应用户的点击事件。
  3. 子视图管理:管理子视图的行为。

View Architecture Fundamentals

view(UIView )与layers(CALayer)的关系?
UIView(user interaction view)用户交互界面,CALayer(Core Animation Layer)核心动画层。顾名思义,可以看出CALayer负责图形的显示与动画效果,而UIView负责触摸事件的传递与处理、子视图管理的功能,UIView持有至少一个CALayer。
所有会有这样的一个场景,就是我们设置了核心动画效果,在动画的过程中无法交互,而且在动画结束后,图形会自动回到原来的位置,那是因为图形参数的改变仅仅作用与CALayer而不是UIView,当动画结束后,UIView的参数会自动覆盖到CALayer的参数中,因此图形会复位。

图形内容重用?
每当一个View需要绘制或者需要重新绘制,iOS就会执行该View的绘制代码,然后生成一个点阵快照保存起来,从而显示在液晶屏幕上的。只有当图形界面的内容发生改变才需要重新绘制,不然要尽可能地重用,因为绘制过程比较消耗资源。

View Hierarchies and Subview Management,view图层与子视图管理?
一个View可以作为其他View的容器,当其他View添加到了一个View上,它们就建立了superView-childView的关系。而superView是通过一个特点的array来管理它的子类的,这个array会存储按照相应顺序添加到superView的childView,并且按照这个顺序来绘制superView内的childView,也可以通过相应的方法来改变array的顺序来改变图形的显示效果。
superView的改变会对childView造成影响,如若superView的frame发生改变,那么childView也应该发生相应的形变来适配。若superView改变alpha值、或者设置了禁止交互,那么childView的相应值也会跟随着改变。

The View Drawing Cycle?
iOS系统屏幕的扫描频率是60HZ,也就是一秒更新屏幕内容60次。当一个View需要显示在屏幕的时候,它会执行它的绘制代码并生成一个快照,当view没有发生改变的时候,界面会一直复用这个快照来显示内容,直到绘制代码重新执行。
当你需要手动启动绘制代码,你需要调用setNeedDisplay or setNeedDisplayInRect两个方法中的其中一个,当这两个方式执行后,系统就会在下一个绘制周期内执行drawRect方法。通常系统自带的View都是默认实现了drawRect,而custom view需要自己定义该方法完成内容的绘制。
所以对于一个view来说,initial方法完成变量的定义,而drawRect方法负责内容的绘制。

Content Mode?
contentMode属性决定快照(点阵位图)是否应该缩放适配新的bound或者总是固定在某个位置,contentMode有以下数值:
  • UIViewContentModeLeft
  • UIViewContentModeRight
  • UIViewContentModeScaleAspectFill
  • UIViewContentModeScaleAspectFit
  • UIViewContentModeToFill
  • UIVIEWContentModeRedraw
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值