UISwipeGesture에 대한 응답으로 Core Animation을 사용하여 회전하는 UIView- 하위 클래스 객체에 문제가 있습니다.Core Animation 및 블록을 사용하여 UIView 객체 회전 문제
컨텍스트를 설명하려면 : 저는 CG로 그린 다이얼을 가지고 기본보기에 하위보기로 추가했습니다. 스 와이프 제스처에 대한 응답으로 어느 방향 으로든 15도 회전하도록 지시하고 있는지 여부에 따라 왼쪽 또는 오른쪽 스 와이프합니다.
한 번만 각 방향으로 회전하는 문제입니다. 후속 제스처가 인식되지만 (트리거 된 다른 동작에서 분명 함) 애니메이션이 반복되지 않습니다. 나는 한 번 왼쪽으로 갈 수 있습니다. 그러나 어느 방향 으로든 여러 번 시도하는 것은 효과가 없습니다. 여기에 관련 코드는 ... 내가 당신의 생각을 알려 주시기입니다
- (IBAction)handleLeftSwipe:(UISwipeGestureRecognizer *)sender
{
if ([control1 pointInside:[sender locationInView:control1] withEvent:nil])
{
//updates the display value
testDisplay.displayValue = testDisplay.displayValue + 0.1;
[testDisplay setNeedsDisplay];
//rotates the dial
[UIView animateWithDuration:0.25 animations:^{
CGAffineTransform xform = CGAffineTransformMakeRotation(radians(+15));
control1.transform = xform;
[control1 setNeedsDisplay];
}];
}
나는 아래의 해답을 살펴볼 것이지만 더 복잡한 것은 ... UIView 다이얼에는 그림자가 있습니다. 뷰를 회전하면 그림자도 회전합니다. CTM (변환 매트릭스)의 위치를 다시 15도까지 복원하고 그림자 문제를 피하기 위해 다시 그리는 방법이 필요하다고 생각하십니까? 보기의 drawRect 메소드 외부에서 CTM을 변경하는 방법을 모르겠습니다. 뷰 컨트롤러에서 뷰의 그래픽 컨텍스트를 참조 할 수 없습니다. 나는 생각한다. 나는 틀릴 수도 ... – Cocoadelica
다이얼을 돌리려고하고 있지만 그림자는 회전 시키려고하지 않습니까? 그리고 다이얼과 그림자는 같은 시각에 있습니까? – Kaiser
두 질문에 모두 예. 그림자가있는 다이얼 아래에 다른 뷰를 놓을 수 있으므로 그림자를 제외하고 숨겨져 있으며 우리가 논의한 카운터 방법을 사용합니다. 그저 변환 행렬을 재설정 할 방법이 없다는 것을 믿을 수 없습니다. 나는 문서를 훑어 보았지만 아무것도 볼 수 없었다. 아마 그것은 내가 받아 들여야 할 무언가 일뿐입니다. – Cocoadelica