为什么在定位之前必须重置UIView旋转变换?

时间:2016-11-23 20:33:57

标签: ios swift uiview cgaffinetransform

我有几行代码在地图上放置了一个北图标。此图标会移动一点,如果旋转地图,则必须朝向北方角度。

但为了使这项工作,我不得不添加一行我不理解的代码。

northIcon.transform = CGAffineTransform.identity // why do I need this line?
northIcon.frame.origin.x = insets.left + 8
northIcon.frame.origin.y = insets.top  + 25
northIcon.transform = CGAffineTransform(rotationAngle: site.angle)

没有第一行,第一次运行此代码它可以正常工作,但是下一次运行它会变得非常小,直到它消失,好像它以一种我没有得到的方式相对于先前状态调整大小。我通过强制转换为标识,然后移动它,然后将其旋转来修复此问题。

但为什么我必须将变换设置为标识?据我所知,帧的计算完全独立于变换。之后,变换开始并改变最终视图的绘制位置和方式。

但显然这是错误的,因为如果确实如此,我不需要先重置转换。

有谁知道这里发生了什么?

1 个答案:

答案 0 :(得分:2)

仅当变换是标识变换时才定义视图的frame属性。如果不是,则读取或操作框架属性的结果是“未定义的”。

即使您已将变换设置为非标识值,也可以使用center属性。