我有几行代码在地图上画了一个北方的图标。此图标会移动一点,如果旋转地图,则必须是朝北的角度。
但为了让这个工作,我不得不添加一行我不明白的代码。

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)

没有了第一行代码,第一次运行代码的时候它运行得很好,但是下一次运行代码的时候它会变得非常小,直到它消失,就像它相对于前一个状态的大小调整一样,我无法理解。我通过强制转换为identity,然后移动它,然后旋转它来修复这个问题。
但为什么我要将转换设置为identity?我的理解是,帧的计算完全独立于变换。然后,转换开始并更改绘制最终视图的位置/方式。
但显然这是错误的,因为如果这是真的,我就不需要先重置转换。
有人知道这是怎么回事吗?

最佳答案

仅当转换为标识转换时,才定义视图的框架属性。否则,读取或操作frame属性的结果将“未定义”
即使将转换设置为非标识值,也可以使用中心属性。

关于ios - 为什么在定位之前必须重置UIView旋转变换?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40773706/

10-12 01:34