죄송합니다. 분명하거나 다른 곳에서 다루어 지지만, 하루 종일 인터넷 검색을 해봤지만 실제로 효과가있는 해결책을 찾지 못했습니다.iPhone 용 Quartz 2D에서 회전 변환을 할 때 원점을 이동할 수 있습니까?
내 문제는 다음과 같습니다. 현재 전체 화면 UIView에서 이미지를 그리는 중입니다. 예를 들어 이미지가 UIView의 오른쪽 아래에 있다고 가정합니다. 그 이미지의 중심에서 회전 변환 (CGAffineTransformMakeRotation)을하고 싶습니다. 그러나 기본적으로 회전 명령은 UIView의 중심을 중심으로 회전합니다. 결과적으로, 내 이미지가 회전 할 때 화면을 돌아 다니며 그 자리에 머무르고 자체 중심을 중심으로 회전합니다.
내가 수집 한 것부터, 원점 (UIView 중심)이 내 이미지의 중심에 있고, 회전하고, 원래 위치로 다시 변환하여 컨텍스트를 복원 할 수 있도록 컨텍스트를 변환해야합니다.
다음은 내가 가장 잘한 일이지만, 이미지가 회전하는 동안 회전하는 동안 아래로 움직이는 것이 문제입니다. 나는
// Before this i'd make a call to a function that draws a path to a passed in context
CGAffineTransform inverseTranslation = CGAffineTransformMakeTranslation(transX, transY);
CGAffineTransform translation = CGAffineTransformMakeTranslation(-transX, -transY);
CGAffineTransform rot = CGAffineTransformMakeRotation(3.14);
CGAffineTransform final = CGAffineTransformConcat(CGAffineTransformConcat(inverseTranslation, rot), translation);
// Then i apply the transformation animation like normal using self.transform = final etc etc
...이 첫 번째 단계는 번역하고 3 단계 대신 상대를 번역의 시작과 끝 지점이 동일 할 것이라고 실현의 번역 트위닝 애니메이션에 의한 생각 나는 또한 같은 물건을 시도했습니다 CGContextTranslateCTM 및 CGContextSaveGState/UIGraphicsPushContext를 사용하지만 거의 영향을 미치지 않는 것 같습니다.
저는 며칠 동안이 문제를 해결하기 위해 노력해 왔지만 현재의 솔루션은 가까운 것처럼 보입니다. 그러나 번역 트위닝을 없애는 방법에 대한 단서가 없습니다. 누구든지 이것에 대한 해결책을 갖고 있습니까?
[업데이트] 당분간 나는 UIview의 중심에 이미지를 그려서 UIView.center 속성을 회전하고 회전 명령을 수행하려는 원점으로 설정합니다. 약간의 해킹처럼 보이지만 실제로 작동하는 번역본을 얻을 때까지 내 유일한 선택입니다. 감사합니다.
pi 값으로 작업 할 때 math.h 상수를 사용해야한다는 것을 보여주기 위해 quick comment- edited. M_PI_4, M_PI_2, M_PI는 모든 반올림 오류보다 정확하고 정확합니다. :) –