在CGAffineTransform之后获得UIView的中心

Kie*_*per 3 iphone uiview cgaffinetransform ios

假设我有一个小的UIView作为一个更大的UIView的子/子视图,那个孩子可以通过一些CGAffineTransforms移动.父母如何知道该视图的真正"中心"在其自己的坐标系中?我已经尝试将convertPoint例程与child.center返回的内容一起使用,但它无法正常工作......在这种情况下,"中心"完全是假的还是我只是使用了错误的方法?

Maz*_*yod 6

编辑:

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

UIViews没有anchorPoint属性,但它们有一个center属性.应用变换后,始终会正确计算center属性,但转换变换除外,您必须执行以下操作:

CGPoint realCenter = CGPointMake(myView.center.x + myView.frame.origin.x, ...);
Run Code Online (Sandbox Code Playgroud)

至于CALayers,它们确实有一个anchorPoint属性,但它们缺少一个中心属性.因此,您要做的是通过对position属性,anchorPoint属性和图层的转换进行计算来手动计算中心.

我无法提供任何代码,因为我不确定您使用的是哪种方法,但要将其包装起来,您必须以任何方式推出自己的中心计算器.


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

在应用任何轮换之前:

在此输入图像描述

施加45°旋转后:

在此输入图像描述

结论:

请注意旧中心是如何(300,225)和新中心,而不是新的!一样的.如果你正确地做了一切,你的中心应该是一样的.如果您在视图中有另一个要计算的点,那么您自己就必须这样做.

另请注意框架如何从(200,100,200,250)更改为(140,65,320,320).这就是UIKit如何发挥它的魔力.