3

假设我有一个小的 UIView 作为较大 UIView 的子视图/子视图,并且可以通过一些 CGAffineTransforms 移动该子视图。父级如何知道该视图的真正“中心”在其自己的坐标系内是什么?我曾尝试将 convertPoint 例程与 child.center 返回的任何内容一起使用,但它不起作用......在这种情况下,'center' 完全是假的,还是我只是使用了错误的方法?

4

1 回答 1

6

编辑:

在做了一些测试后,我注意到以下几点:

UIViews 没有 anchorPoint 属性,但它们有 center 属性。center 属性在应用变换后总是会正确计算,除了平移变换,您必须执行以下操作:

CGPoint realCenter = CGPointMake(myView.center.x + myView.frame.origin.x, ...);

至于CALayers,它们确实具有 anchorPoint 属性,但缺少 center 属性。因此,您要做的是通过对位置属性、锚点属性和图层的平移进行计算来手动计算中心。

我无法提供任何代码,因为我不确定您使用的是哪种方法,但要结束它,您必须以任何一种方式推出自己的中心计算器。


请仔细看下面的图片(由斯坦福 iPhone 开发课程幻灯片提供):

在应用任何旋转之前:

在此处输入图像描述

应用 45° 旋转后:

在此处输入图像描述

结论:

请注意旧中心是 (300, 225) 而新中心是,不是新的!一样的。如果你做的每件事都正确,你的中心应该是一样的。如果您想计算视图中的另一个点,那么您必须自己计算。

另请注意帧如何从 (200, 100, 200, 250) 更改为 (140, 65, 320, 320)。这就是 UIKit 的神奇之处。

于 2012-10-20T18:07:09.897 回答