2016-11-23 5 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) 

,이 코드는 첫 번째 시간은 잘 작동하지만이 방법 나는 돈에 이전 상태를 기준으로 크기를 조절하는 것처럼 그것을 통해 다음 실행, 그것은 사라질 때까지 매우 작은 얻을 달렸다 알았어. 나는 정체성으로 변환을 강제로 고정시킨 다음 그것을 이동시킨 다음 다시 돌려 보았습니다.

왜 변환을 ID로 설정해야합니까? 프레임이 변환과 완전히 독립적으로 계산된다는 것은 내 이해입니다. 그리고 나서 변형이 시작되어 최종 뷰가 어디서 어떻게 표시되는지를 변경합니다.

분명히 틀린 데, 사실이라면 먼저 변환을 재설정 할 필요가 없기 때문입니다.

여기에 무슨 일이 일어나는 지 아는 사람이 있습니까?

답변

2

변환이 식별 변환 인 경우에만보기 프레임 속성이 정의됩니다. 그렇지 않으면 프레임 속성을 읽거나 조작 한 결과가 "정의되지 않음"입니다.

변형을 비정상 값으로 설정 한 경우에도 center 속성을 사용할 수 있습니다.

+0

흥미 롭군요, 그게 _odd_ 디자인 선택처럼 보입니다 ... 그리고 view.frame.center는 세터가없는 게터입니다. 합리적인 솔루션인가요? 아니면 여기에 더 우아한 방법이 있습니까? –

+0

'view.center'를 사용하고 싶습니다. –

+1

'view.center'가 아니라'view.center'입니다. –