다른 앵커 포인트를 중심으로 UIView를 회전하려고합니다. 처음 UIView를 만들 때 고정 점을 (0.0, 0.5)로 설정했습니다. 나는 CGAffineTransformMakeRotation을 사용하여 뷰를 회전시킨다. UIView의 다른면을 클릭하면 앵커 지점을 (1.0, 0.5)로 설정하려고합니다. 그러면 UIView가 움직여 고정 점을 중심점으로 설정합니다. 나는 이것을해야한다는 다른 대답을 읽었습니다. "bounds의 너비와 높이에 이전과 새로운 anchorPoint의 정규화 된 값을 곱하고 두 anchorPoints의 차이를 취하여 그 차이를 레이어의 위치에 적용합니다"앵커 포인트 변경 및 CGAffineTransformMakeRotation을 사용하여 회전
하지만 UIView를 똑같은 위치로 설정할 수 없습니다. 이 코드를 사용하십시오 :
self.transform = CGAffineTransformTranslate(self.transform, self.bounds.size.width, 0);
정확히 같은 위치로 설정하십시오. 내가 다시 회전하면 (새로운 앵커 포인트를 중심으로 회전해야 함) UIView를 뒤집거나 이상한 일이 발생합니다.
theAngle = atan2 (pointofTouch.y - self.center.y, pointofTouch.x - self.center.x)를 사용하여 회전합니다. totalRadians = theAngle; self.transform = CGAffineTransformMakeRotation (라디안); 프레임이나 센터를 사용하여 뷰를 정확히 같은 위치에 다시 배치 할 필요가 없습니다. 또한이 문제의 일부를 다음과 같이 수정했습니다. self.transform = CGAffineTransformRotate (self.transform, totalRadians - oldRadians); 번역 후. 하지만 이것은 센터를 업데이트하지 않으므로 올바른 앵커 포인트를 중심으로 다른 뷰에서 뷰를 회전시킵니다 (센터는 업데이트되지 않습니다). – Basel
원래 게시에서 그 점을 명확하게 설명했기 때문에 번역을 어떻게 사용했는지 알고 있습니다. 비 정체성 변환으로 인해 프레임 속성을 사용할 수 없기 때문에 프레임 이동이 더 나은 방법 일 수 있다고 말한 것입니다. (하지만이 경우에는 전혀 관련이 없습니다.) 글쎄, 문제가 해결되어 기쁘다. 다음 번에는 상황에 대해 더 많은 정보를 제공하십시오 (원래 질문에서 totalRadians-oldRadians를 고칠 수있는 방법이 없습니다). 그러면 문제를 더 빨리 해결할 수 있습니다 = – MHC