2016-11-23 3 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

ビューのフレームプロパティは、変換が恒等変換である場合にのみ定義されます。そうでないときは、フレームプロパティを読み込んだり操作したりした結果が「未定義」です。

トランスフォームを非同一値に設定している場合でも、centerプロパティを使用できます。

+0

興味深いことに、それは_odd_デザインの選択肢のようです...そして、view.frame.centerはセッターのないゲッターです。それでは私の解決策は妥当か、より優雅な方法がありますか? –

+0

'view.center'を使います。 –

+1

'view.center'ではなく' view.center'です。 –

関連する問題