View官方文档

  1. Window是UIWindow class下的实例并且处理了总体的application的UI的展现。大部分来说,app的window不会有变化。
  2. View是在CALayers之间的连接处工作,去渲染和变换view的内容。所有UIKit的view背后都有一个layer对象(通常是CALayer 的class),这些layer对象是存储views和处理view相关的动画。
  3. CALayer对象的作用对性能有很大的提升。实际view对象的drawing代码调用越少越好,并且当代码被调用,结果会被Core Animation缓存并且会被尽可能多的复用。复用尤其在animation的时候非常有用。 因此越多复用越少系统消耗。
  4. UIView类使用了按需drawing模型来展示内容。
  5. 当你的view的内容变化时,不应当直接redraw这些内容。相反,应当通过setNeedsDisplay或者setNeedsDisplayInRect:method方法来使这些view失效。这些方法告诉系统view有变化并且需要在下一个节点上来重绘。系统会等到当前runloop的结束在重新进行任何重绘之前,这个delay会给机会去删除view或者隐藏view,或者其他形式的对view的操作。所有操作都会在同一时间得到反应。
  6. 修改view的集合特性(比如修改位置)并不会自动的使得view的内容重绘。
  7. 当渲染view的内容时,实际drawing过程会因view和它对应配置而有所不同。系统的view通常会继承private的drawing方法来渲染content。这些系统views会暴露出接口来供你修改view的实际显现。 如果要自定义UIView的subclass,经常要重写drawRect方法并绘制自己的内容。通常提供view的内容的方法有很多,比如直接设置view的下层layer,或者重载drawRect方法是最通常的技术。
  8. 当View开始被显示时,结果被capture在下层的bitmap中。之后,view几何属性的变化并不会经常导致bitmap被重新创建。取而代之的是,contentMode的值会决定bitmap是否应当去裁剪以适应新的bounds或者定位在某个view的边缘之上。
  9. ContentMode是循环利用view的contents的好方法,但是你依然能设置conent Mode为UIViewContentModeRedraw,尤其当你想在scaling或者resizing操作时去自定义views或者去redraw时。此值下,系统会强制调用drawRect:方法来响应几何变换。
  10. 如果一个view的集合特性改变了,UIKit会update它的subviews通过如下规则: a) 如果配置了autoresizing rules,UIKit仅仅adjust每一个view通过这些rules。 b) 如果实现了layoutSubviews方法,UIKit会调用它。可以通过这个方法来调整任何subviews的位置和size。
  11. 如果任何view被标记为需要被redrawn,UIKit会让view去自己redraw。对于定义了drawRect方法的自定义view,UIKit会调用那个方法。
  12. frame,boundsproperties的关系 a) frame是指在其父 中的坐标系统中的frame矩形属性; b) bounds是指在view自己的坐标系统中的bounds矩形属性
  13. 使用center或者frame属性主要为了管理当前view的几何属性,比如修改位置或者尺寸。
  14. 针对只修改位置的情况,center属性是最佳方案
  15. 在drawing过程中主要使用bounds属性
  16. 虽然可以单独修改frame、bounds、center属性,但是其中这些属性会互相影响: a) Set frame属性时,bounds的size会match到新的frame的size上;center属性也会match到新frame的center上; b) Set center属性时,frame的original值也会相应改变 c) Set bounds的size属性时,frame的size属性也会match到bounds的size属性上。
  17. Points vs Pixels。在iOS中,所有坐标值和距离都是浮点数,引用为points。
  18. 一个points未必对应到屏幕上的一个pixel。
  19. 自定义的部分事件部分如下: a) Event-handling,例如touchBegan—touchesMoved—touchesEnded—touchesCancelled b) LayoutSubviews c) drawRect
  20. drawRect:只有在你的view在运行时变化并且使用了native技术例如UIKit或者Core Graphics等等做绘图时才需要被使用。
  21. 不论哪一种content mode生效,你都可以强制使用setNeedsDisplay或者setNeedsDisplayInRect来重绘内容。
  22. 一个window对象有很多职责: a) 包含了app的可视对象 b) 承载了你的view和其它app对象的touch事件 c) 和你的app的vc一起工作,促进方向的改变
  23. UIWindowDidBecomeKeyNotification和UIWindowDidResignKeyNotification通知帮助你的app去锁定哪一个window是key window,也就是接收键盘时间和其它touch相关事件的window。
  24. 另一个可以添加subviews到一个view体系里的就是loadView或viewDidLoad方法。
  25. 切记,如果你remove了一个子view并且计划将来要重用,一定要重新retain这个子view。因为removeFromSuperview会autorelease一个subview,在真正移除之前。所以如果你不在下一个事件loop cycle之前retain这个view,view可能会被release掉。
  26. Convert…: fromView:方法会从其它view的坐标系系统转换为local当前view的坐标系系统。如果你指定nil为上述方法的参数,转换会将对应的坐标系落在包含view的window上。
  27. 当实现一个可以拖动的area时,需要经常手动给 子views布局。因为如果给可滚动的内容单独一个大的scrollable内容是不高效的,app需要继承一个root view来包含很多更小的title views。
  28. 每一个view对象都对应了一个CALayer来管理展示层和动画层。
  29. 在自定义view时需要注意: a) 决定好合适的初始化函数: 如果是手动编写,override initWithFrame:方法 如果是从nib文件读取,override initWithCoder方法。 b) 实现dealloc方法去处理自定义data的清理问题 c) 处理自定义绘制,覆盖drawrect方法。 d) 如果view管理很多子view,那么: i.在init序列里创建这些view ii.如果view需要自定义布局,则override layoutSubviews方法并将布局方法放在那里。
  30. 很多属性可以允许你是使用覆盖过的方法,例如contentMode设置为contentStrech属性,可以改变最终render的结果,并且可以去由你自己redraw内容。
  31. 改变一个view的subview的animation方法:在iOS4后,使用transitionWithView:duration:options:animations:completion:方法去初始化一个view的变化过渡。在block中传入此方法,则会改变涉及到showing,hiding,adding,removing子view的方法。
  32. 将一个View替换为另一个View的animation:在iOS4以后,可以通过transitionFromView:toView:duration:options:completion:方法来在两个views中切换。这个方法通常会remove第一个view,切换为第二个view,所以如果你还想使用第一个view,最好做好retain。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏个人随笔

实现Windows程序的数据更新

枚举是一组描述性的名称 定义一组有限的值,不包含方法 对可能的值进行约束 枚举是一组指定的常数,对可能的值进行约束 枚举使用时直观方便、更易于维护 pictur...

3528
来自专栏简书专栏

基于Excel2013的数据转换和清洗

数字可以被设成的格式有12种:常规、数值、货币、会计专用、日期、时间、百分比、分数、科学记数、文本、特殊、自定义

1692
来自专栏吾爱乐享

php学习之html小结1

1183
来自专栏生信宝典

R语言学习 - 图形设置中英字体

绘制生信宝典调查总结文中的柱状图时,出现了中文乱码,就搜索了下解决方案,记录如下。 修改图形的字体 ggplot2中修改图形字体。 # 修改坐标轴和legend...

3838
来自专栏hightopo

扩展HT for Web之HTML5表格组件的Renderer和Editor

3233
来自专栏一直在跳坑然后爬坑

Flutter常用widget 'Row、Column'

用于水平显示子项 A widget that displays its children in a horizontal array. 注:这个控件本身不可...

4672
来自专栏HT

扩展HT for Web之HTML5表格组件的Renderer和Editor

在HT for Web提供了一下几种常用的Editor,分别是: slider:拉条 color picker:颜色选择器 enum:枚举类型 boolean:...

3667
来自专栏along的开发之旅

ubuntu下sougou输入法候选词处乱码

1752
来自专栏王磊的博客

史上最易懂——ReactNative分组列表SectionList使用详情及示例详解

React Native系列 《逻辑性最强的React Native环境搭建与调试》 《ReactNative开发工具有这一篇足矣》 《解决React N...

91014
来自专栏hightopo

原 基于 HTML5 WebGL 的 3D

2264

扫码关注云+社区

领取腾讯云代金券