假设我有一个小的UIView作为一个更大的UIView的子/子视图,那个孩子可以通过一些CGAffineTransforms移动。父母如何知道该视图的真正“中心”在其自己的坐标系中?我已经尝试将convertPoint例程与child.center返回的内容一起使用,但它无法正常工作......在这种情况下,“中心”完全是假的还是我只是使用了错误的方法?
答案 0 :(得分:6)
修改强>
经过一些测试后,我注意到以下几点:
UIViews没有anchorPoint属性,但它们确实有一个center属性。除了翻译变换之外,中心属性始终在应用变换后正确计算,您必须执行以下操作:
CGPoint realCenter = CGPointMake(myView.center.x + myView.frame.origin.x, ...);
至于CALayer
,它们确实有一个anchorPoint属性,但是它们没有中心属性。因此,您要做的是通过对position属性,anchorPoint属性和图层的转换进行计算来手动计算中心。
我无法提供任何代码,因为我不确定您使用的是哪种方法,但要将其包装起来,您必须以任何方式推出自己的中心计算器。
请仔细查看下面的图片(由斯坦福iPhone开发课程幻灯片提供):
在应用任何轮换之前:
应用45°旋转后
<强>结论:强>
注意老中心是如何(300,225)和新中心的,不是新的!一样的。如果你正确地做了一切,你的中心应该是一样的。如果您在视图中有另一个想要计算的点,那么您自己就必须这样做。
请注意框架如何从(200,100,200,250)更改为(140,65,320,320)。这就是UIKit的神奇之处。