设置CALayer的bounds.origin属性是做什么用的?

4
在CALayer的API中,“position”用于设置图层的位置。
经过我的测试,设置“bounds.origin”并不起作用。我错过了什么吗?
2个回答

4
bounds.origin控制图层坐标系的原点相对于其父图层中图层框架的位置。更改它会产生两个可见效果:
  1. 图层子层的位置。例如,当您滚动UIScrollView时,滚动视图不会更改其子视图的框架。它只是更改了其bounds.origin。我建议您设置一个玩具应用程序,使用计时器或其他触发器执行NSLog("scroll view bounds = %@", NSStringFromCGRect(scrollView.bounds));,以了解正在发生的情况。
  2. drawInContext:中图形上下文坐标系的原点。通常在视图的drawRect:方法中看到此效果。您drawRect:内部的CGContext将被self.bounds.origin平移。
您可能会发现阅读iOS View Programming Guide中的“视图几何和坐标系统”Core Animation Programming Guide中的“图层对象定义其自己的几何形状”有所帮助,尽管它们都没有很好地讨论bounds origin

你提供的描述是frame.origin。如果我漏掉了什么,请告诉我。 - Evil Nodoer
frame.origin 影响图层在其父图层中的位置。bounds.origin 影响图层子图层和内容的位置。 - rob mayoff
1
关于第二点,您是错误的。一个图层的bounds.origin不会影响其内容的位置,而只会影响其子图层的位置。例如,如果您将CGImage分配给图层.contents,然后偏移bounds.origin,图像将不会移动。 - algal
1
就我个人而言,我认为你最初的想法更加合理——只可惜系统不是那样工作的!特别令人困惑的是,bounds.origin 不会影响分配给 layer.contents 图像的屏幕位置,但却会影响子图层和绘制图形的位置。最清晰的表述似乎是:bounds.origin 用于确定子图层和绘制内容在内容内部的位置,而不是内容本身的位置。我花了几个小时才完全理解这一点! - algal

1
改变边界矩形会改变图层本身坐标系中内容的位置和大小。改变框架(或位置)会改变图层在其父图层坐标系中的位置。通常只需要更改框架,而不是边界。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接