【问题标题】:CALayer frame.size not equal to bounds.sizeCALayer frame.size 不等于 bounds.size
【发布时间】:2012-06-24 08:35:09
【问题描述】:

我在CALayer上遇到了一些奇怪的事情。最后发现CALayer的frame.size不等于它的bounds.size,我无法理解。我知道frame在super的坐标系中,bounds是它自己的坐标,通常情况是 frame.origin 不等于 bounds.origin 但 frame.size 等于 bounds.size。

【问题讨论】:

  • 子视图上应用改造了吗?喜欢旋转?
  • 在超层和自身上变换

标签: ios frame calayer bounds


【解决方案1】:

这是因为您应用了转换,正如苹果在 frame 属性的文档中所说的那样。

警告如果变换属性不是恒等变换,则 此属性的值未定义,因此应忽略。

...

对此属性的更改可以设置动画。但是,如果变换 属性包含一个非恒等变换,帧的值 属性未定义,不应修改。在这种情况下,你 可以使用 center 属性重新定位视图并调整大小 改为使用 bounds 属性。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html

如果您没有应用变换,则原点可能不同,但大小应保持相同,因为调整一个重新调整另一个。

边界矩形的大小与框架的大小耦合 矩形,因此对一个的更改会影响另一个。

【讨论】:

  • 如果 frame 的值未定义,因此应该被忽略,那么系统如何决定在哪里绘制图层。其实让我困惑的是,我的层总是大于层的bounds.size
  • 它使用 center 属性,“在这种情况下,您可以使用 center 属性重新定位视图并使用 bounds 属性调整大小。”全部在文档中。这很有意义,当您旋转某些东西时,包含它的“正方形”必须增长,因此边界定义了内部正方形的大小和包含正方形的框架。
  • 是的,我明白了。因为我缩放 2x,所以边界也是显示 2x。例如,size(100,100) 将显示为 size(200,200)
  • 当图层被转换时,您不必忽略框架。事实上,框架只是代表完全包含变换层的最小矩形,这很有用。无论变换如何,边界都保持不变。所以它们只是坐标空间的两种不同表示,具体取决于您感兴趣的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多