2012-06-06 2 views
-1

나는 아침 내내 노력했고 불가능하다고 생각하기 시작했습니다.uitouch를 다시 시작하십시오.

화면에 터치가있어서 응답 체인에 들어가서 뭔가를했을 수도 있습니다. 그런 다음 터치 스크린으로 이동하여 touchesMoved : 메소드 (터치와 관련된 uiResponder)를 호출하고 다른 작업을 수행했을 수 있습니다. 이 시점에서 터치가 화면에서 계속 이동하고 다른 uiView로 들어가면 uiTouch가 다시 초기화됩니다. 즉, 첫 번째 uiView에서 touchEnded를 호출 한 다음 uiView를 호출합니다. touchesBegan , 그리고 계속 이동하면 touchesMoved를 호출합니다.

나는 resignFirstResponder를 시도하고 수동으로 메서드를 호출하려고했지만 그럴 수 없습니다. 나는 이것을 위해 정말로 간단한 대답이 있어야한다고 계속 생각하고 있습니다. (문서에 아무것도하지만)

UITouch *touch = [touches anyObject]; 
CGPoint location = [touch locationInView:self.superview]; 
if (!CGRectContainsPoint(self.frame, location)) { 
    [touch restart]; 
} 

또는

[[touch phase] restart]; 

같은 뭔가가 :

답변

0

나의 추천 당신이 접촉을받을 통해 전환하고자하는 모든 뷰의 수퍼를하는 것입니다, 그런 다음 touchesMoved/Began/Ended 메소드 내의 하위 뷰 (CGRectContainsPoint (...)를 통해)에서 히트 테스트를 수행하고 이에 따라 터치를 전달합니다 (하위 뷰의 해당 touchesBegan/Moved/Ended 메소드 호출).

+0

답변 해 주셔서 감사합니다.하지만 터치가 view1에서 시작되어 view2로 이동하면 view2에서 호출 된 메소드는 touchesMoved가됩니다. view2에서 touchesBegan을 호출하고 view1에서 touchesEnded를 호출하는 빠른 방법이 있습니까? –

+0

어쨌든이 솔루션을 사용하면 메서드를 하위 뷰로 리디렉션하므로 사용자 고유의 논리를 가질 수 있습니다. view0의 touchesMoved 메소드에서 viewA 및 viewB와 함께 view0 및 viewB가있는 view0이있는 경우 이전 터치가 viewA 안에 있고 새 touch 이벤트가 viewB에 있으면 viewA touchesEnd 및 viewB touchesBegan을 보냅니다. 그렇지 않으면 새 터치 이벤트에 touchesMoved 메시지를 보냅니다. – Christian

관련 문제