在CALayer的API中,'position'用于设置图层的位置。设置CALayer的bounds.origin是做什么的?
通过我自己的测试,设置bounds.origin不会做任何事情。我错过了什么吗?
在CALayer的API中,'position'用于设置图层的位置。设置CALayer的bounds.origin是做什么的?
通过我自己的测试,设置bounds.origin不会做任何事情。我错过了什么吗?
bounds.origin
控制图层坐标系的原点相对于其上层图层的框架。改变它有两个可见的效果:
层的子层的位置。例如,当您滚动UIScrollView
时,滚动视图不会更改其子视图的框架。它只是更改其bounds.origin
。我建议设置一个带有滚动视图的玩具应用程序,并使用定时器或其他触发器来执行NSLog("scroll view bounds = %@", NSStringFromCGRect(scrollView.bounds));
,以了解发生了什么。
图形上下文坐标系的原点drawInContext:
。通常你会在视图的drawRect:
方法中看到这种效果。您的CGContext
里面的drawRect:
已被翻译self.bounds.origin
。
您可能会发现它有助于了解“View Geometry and Coordinate Systems” in the View Programming Guide for iOS和“Layer Objects Define Their Own Geometry” in the Core Animation Programming Guide,但真的没有人有界限起源的很好的讨论。
更改边界矩形会更改图层自身坐标系中内容的位置和大小。改变框架(或位置)可以改变图层在其超级图层坐标系中的位置。通常你只想改变框架,而不是边界。
您给出的描述是frame.origin。让我知道如果我错过了什么。 –
'frame.origin'影响图层在其上层的位置。 'bounds.origin'会影响图层子图层和内容的位置。 –
您对#2错误。一个图层的bounds.origin不会影响其内容的位置,而只会影响其子图层的位置。例如,如果将CGImage分配给layer.contents,然后偏移bounds.origin,图像将不会移动。 – algal