我有几行代码在地图上放置了一个北图标。此图标会移动一点,如果旋转地图,则必须朝向北方角度。
但为了使这项工作,我不得不添加一行我不理解的代码。
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)
没有第一行,第一次运行此代码它可以正常工作,但是下一次运行它会变得非常小,直到它消失,好像它以一种我没有得到的方式相对于先前状态调整大小。我通过强制转换为标识,然后移动它,然后将其旋转来修复此问题。
但为什么我必须将变换设置为标识?据我所知,帧的计算完全独立于变换。之后,变换开始并改变最终视图的绘制位置和方式。
但显然这是错误的,因为如果确实如此,我不需要先重置转换。
有谁知道这里发生了什么?
答案 0 :(得分:2)
仅当变换是标识变换时才定义视图的frame属性。如果不是,则读取或操作框架属性的结果是“未定义的”。
即使您已将变换设置为非标识值,也可以使用center属性。