2012-10-05 2 views
1

나는 사용자가 시계 바늘을 돌릴 수있는 응용 프로그램을 개발하고 있습니다. 그것을 위해 나는 바늘의 이미지 뷰의 속성을 변환을 사용하고 있습니다 :CGAffineTransformRotate 크기 문제

CGAffineTransform newTrans = CGAffineTransformRotate(initialTransform, -angleDif); minutesNeedle.transform = newTrans;

를 사용자의 터치 내가 바늘의 공간 (분 또는 시간의 프레임)을 감지해야한다을 검출하기위한 목적. 그리고 여기 내 문제는, 이미지를 회전시킨 후에 이미지가 늘어나고 다른 이미지와 간섭하는 것처럼 보입니다. UIView 클래스 설명서에서는 변형 된 후에 뷰의 프레임이 변경되며 중심 및 경계 속성을 사용해야한다고 말합니다. 그러나, 나는 superview에있는 접촉 사용자를 감지하기 위해 경계 속성을 사용할 수 없습니다.

프레임 크기를 변경하지 않고이 애니메이션을 수행하는 다른 방법이 있습니다 (의심 스럽습니다). 또는 touchesEnded 메서드에서 프레임 크기를 조정할 수 있습니다 (시도했지만 헛된). 제가 일주일 동안저기서 막을 수 있도록 도와주세요 !! 감사합니다

답변

1

아마 내가 놓친거야,하지만 당신이 모든이 갈등을 피할 수있는 것 같습니다. 바늘 뷰와 관계없이 터치를 처리하기위한 별도의 뷰를 작성하십시오. 터치 이벤트에서 바늘 모양을 적절하게 이동합니다. 이 분리 된보기는 본질적으로 시계의 크기가 될 것이고 다른 배경에 겹쳐지며 맑은 배경을가집니다. 적절한 콜백을 가진 델리게이트가 있으므로 뷰 컨트롤러 (또는 바늘을 소유하고있는 모든 것)가 조정할 수 있습니다. WAY 훨씬 쉽게

- (void)touchReceiverView:(TouchReceiverView *)view didReceiveTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
+0

나는 당신이 말하는 것을 이해하고 있는지 확신하지 못합니다. 그러나 이미 내 바늘을 잡을 뷰를 만들려고했는데 그 다음에 뷰 (바늘의 이미지가 아닌)를 변형 시키면 이미지의 크기가 올바르게 유지되지만 이미지 좌표는 뷰를 유지하는 뷰에 상대적입니다. 그래서 x와 y는 사용자의 축에 대해 틀립니다. 답장을 보내 주셔서 감사합니다 – Jazzmanouch

+0

바늘이 들어있는보기 외에도 빈/선명한보기를 만드는 것을 의미합니다. 시계 위에 오버레이하여 해당 뷰의 터치 이벤트를 사용하여 바늘 뷰의 애니메이션을 제어합니다. – Matt

+0

touchesMoved 메서드 나는 touche의 사용자가 바늘의 프레임에 있는지 테스트하고 있습니다 (if (CGRectContainsPoint (needle.frame, touch)).이 경우 빈 뷰에서 원래 크기의 바늘 프레임을 어떻게 감지합니까? – Jazzmanouch

0

이 CALayers 함께 수행하고 성능이 더 나은 방법입니다 : 지금까지 콜백이 될 것과

, 난 그냥 같은 터치 이벤트를 전달합니다.

CALayer *handLayer = [CALayer layer]; 
handLayer.contents = (id)[UIImage imageNamed:@"hand.png"].CGImage; 
handLayer.anchorPoint = CGPointMake(0.5,0.0)]; 
[myview.layer addSublayer:handLayer]; 

//i.e.: if handLayer represents the seconds hand then repeat this every second ;) 
handLayer.transform = CGAffineTransformMakeRotation (angle); //set the angle here 


사람이 어쩌면 당신이 그것을 유용하는 ClockView sample using CALayers 썼다.

+0

CALayer로 시도했지만 불행히도 같은 문제가 .. 회전하는 trasform을 적용 할 때 레이어의 크기도 변합니다 !! 나는 사용자 터치를 정확히 감지하고 크기가 같은 동일한 크기와 위치를 유지하려고합니다. CGRectContainsPoint (needle.frame, touch)) !! 감사 – Jazzmanouch