为啥使用两种类型(边界/框架)来描述视图而不是一种?
Posted
技术标签:
【中文标题】为啥使用两种类型(边界/框架)来描述视图而不是一种?【英文标题】:why using two types (bounds/frame) to describe a view instead of one?为什么使用两种类型(边界/框架)来描述视图而不是一种? 【发布时间】:2012-04-13 17:53:43 【问题描述】:我想知道为什么有两种类型(边界/框架)来描述视图。由于更改视图的 bounds.size.* 也会更改该视图的 frame.size.* ,反之亦然,这意味着 frame 和 bounds 之间的唯一区别是它们的原点,那么为什么我们需要两种不同的类型来描述视图几何?顺便说一下,bounds.origin 到底是什么意思?
【问题讨论】:
Why is there an frame rectangle and an bounds rectangle in an UIView? 的可能重复项 【参考方案1】:取自 CocoaDev:
frame 在视图的superview 的坐标空间中表示。 边界在视图的自己的坐标空间中表达。视觉解释(Apple Developer Reference):
参考:http://developer.apple.com/documentation/Cocoa/Conceptual/DrawViews/Concepts/ViewHierarchy.html
【讨论】:
谢谢,但我知道框架/边界之间的区别(问题已更新,抱歉),但我只是想知道为什么我们需要两种类型来描述视图,因为两者的大小框架/边界是相同的。 @mf25 好吧...让我们这样看:如果我们只关心大小,那么我想苹果会弃用bounds
和 frame
并留下 width
或height
财产。 bounds
和 frame
存在的原因是它们返回的 NSRect
结构(除 size.width
和 size.height
属性之外)包括起始 (X,Y) 坐标。在这方面,如上所示,它们肯定是不同的...... :-)
边界可以更大,并且与框架有不同的来源;例如,这就是滚动视图的工作方式。当用户移动边界时,滚动视图的框架保持固定。以上是关于为啥使用两种类型(边界/框架)来描述视图而不是一种?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 pytz 在跨越 TZ 和 DST 边界而不是 TZ 名称时正确调整时间和偏移量?