Fork me on GitHub

objc中国学习--Views

从今天开始学习objc中国的所有博客。

Views

  • 卷首语

  • 绘制像素到屏幕上

  • 理解 Scroll Views

  • 自定义 Collection View 布局

  • 自定义控件

  • 先进的自动布局工具箱

ScrollView

每个视图都有一个 boundsframe。当布局一个界面时,我们需要处理视图的 frame。这允许我们放置并设置视图的大小。视图的 framebounds 的大小总是一样的,但是他们的 origin 有可能不同。

视图只关心一件事就是绘制它自己的 content。这个绘制发生在每个视图的 drawRect: 方法中。

drawRect: 方法被调用前,会为视图创建一个空白的图片来绘制 content。这个图片的坐标系统是视图的 bounds。几乎每个视图 boundsorigin 都是 {0,0}。

scroll view 的 content size 并不会改变其 bounds 的任何东西,所以这并不会影响 scroll view 如何组合自己的子视图。反而,content size 定义了可滚动区域。scroll view 的默认 content size 为 {w:0, h:0}。既然没有可滚动区域,用户是不可以滚动的,但是 scroll view 仍然会显示其 bounds 范围内所有的子视图。
content size 设置为比 bounds 大的时候,用户就可以滚动视图了。

contentInset 属性可以改变 content offset 的最大和最小值,这样便可以滚动出可滚动区域。

Collection View

layoutAttributesForElementsInRect,collection view 调用这个方法并传递一个自身坐标系统中的矩形过去。

除了 cell,collection view 额外管理着两种视图:supplementary viewsdecoration views

collection view 中的 Supplementary views 相当于 table view 的 section header 和 footer views。

自定义控件

如果你真的选择了重写 drawRect:,确保检查内容模式。默认的模式是将内容缩放以填充视图的范围,这在当视图的 frame 改变时并不会重新绘制。

交互模式 (待更新)

  • 使用 Target-Action
  • 使用 Delegate
  • 使用 Block
  • 使用 KVO
  • 使用 Notification

自动布局

更新约束 (updating constraints) 和布局视图 (laying out views)。

更新约束:这些布局将在实际设置视图的 frame 时被传递过去并被使用。你可以通过调用 setNeedsUpdateConstraints 来触发这个操作,同时,你对约束条件系统做出的任何改变都将自动触发这个方法。

你可以调用 layoutIfNeeded 来强制系统立即更新视图树的布局。

参考

#3 Views


版权声明



Ivan’s Blog by Ivan Ye is licensed under a Creative Commons BY-NC-ND 4.0 International License.
叶帆创作并维护的叶帆的博客博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证

本文首发于Ivan’s Blog | 叶帆的博客博客( http://yeziahehe.com ),版权所有,侵权必究。

本文链接:http://yeziahehe.com/2015/09/24/Objc_learning--Views/