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

Why does a UIView rotation transform have to be reset before positioning?

我只有几行代码可以在地图上放置一个北方图标。此图标会稍微移动,如果旋转地图,则必须向北倾斜。

但是为了让它工作,我不得不添加一行我不理解的代码。

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)

没有第一行,这段代码第一次 运行 工作正常,但下一个 运行 变得非常小直到它消失,就好像它相对于前一个调整大小一样以我不明白的方式陈述。我通过强制 t运行sform 为身份,然后移动它,然后将其旋转回来来解决这个问题。

但为什么我必须将 t运行sform 设置为 identity?据我了解,框架的计算完全独立于 t运行sform。然后 t运行sform 开始并更改 where/how 最终视图被绘制。

但显然这是错误的,因为如果这是真的,我就不需要先重置 t运行sform。

有人知道这是怎么回事吗?

视图的框架 属性 仅在变换为恒等变换时才定义。如果不是,读取或操作帧 属性 的结果是 "undefined."

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