2016-11-23 17 views
0

我有幾行代碼將北圖標放在地圖上。此圖標稍微移動一下,如果地圖旋轉,則該圖標必須朝北。爲什麼UIView旋轉變換必須在定位之前重置?

但爲了使這項工作,我不得不添加一行我不明白的代碼。

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) 

如果沒有第一線,第一時間這段代碼運行它工作正常,但通過它下一次運行變得非常微小,直到它消失了,就好像它在某種程度上我不調整相對於以前的狀態不會的。我通過強制轉換爲身份,然後移動它,然後將其旋轉回來來解決此問題。

但爲什麼我必須將變換設置爲標識?我的理解是,幀的計算完全獨立於變換。然後在這之後,變換開始並改變最終視圖的繪製位置/方式。

但很明顯這是錯誤的,因爲如果它是真的,我不需要首先重置變換。

有人知道這裏發生了什麼嗎?

回答

2

視圖的框架屬性僅在轉換是標識轉換時才定義。如果不是,則讀取或操作框架屬性的結果是「未定義的」。

即使您已將變換設置爲非標識值,也可以使用居中屬性。

+0

有趣的是,這似乎是一個_odd_設計選擇......並且'view.frame.center'是一個沒有setter的getter。那麼我的解決方案是否合理呢?還是有更優雅的方法? –

+0

你想使用'view.center'。 –

+1

它是'view.center',而不是'view.frame.center'。 –

相關問題