2011-03-09 6 views
0

에 충돌 :있는 UIButton 내가에 draginside 이벤트를 보내는있는 UIButton이 uitouch 이벤트

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 

그것은있는 viewDidLoad에서 다음 코드를 통해이 작업을 수행 : 그것은로 전송하는 방법 내에서

[colourButton1 addTarget:self action:@selector(touchesBegan:withEvent:) forControlEvents:UIControlEventTouchDown]; 

, 다음 줄이 :

UITouch *myTouch = [touches anyObject]; 

그리고 몇 가지 이유를 들어,있는 UIButton 내부에 끌어이 충돌 앱. 어떤 아이디어?

편집 :이 솔루션 ..

-(IBAction)buttonDragged:(id)button withEvent:(UIEvent*)event { 
    NSSet *touches = [event touchesForView:colourButton1]; 
    [self touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event]; 
} 

답변

4

당신이 행동을 선택기의 3 개 종류를 전달할 수 있습니다 제어 대상 추가 할 - 이름은 중요하지 않습니다

- (void)action 
- (void)action:(id)sender 
- (void)action:(id)sender withEvent:(UIEvent*)event 

을, 그것은 수있어 중요한 매개 변수입니다. 컨트롤에서 2 개의 매개 변수가있는 메시지를 대상으로 보내는 경우 첫 번째 매개 변수는 컨트롤 자체 (사례에서는 UIButton의 인스턴스)이고 두 번째 매개 변수는 UIEvent입니다. 그러나 NSSet의 인스턴스가 첫 번째 매개 변수로 사용되며 anyObjectUIButton을 이해하지 못하는 메시지를 보냅니다. 이것이 충돌의 원인입니다.

왜 UI 컨트롤에서 터치 처리 방법 touchesMoved:withEvent:으로 이벤트를 보내려고합니까? 아마 당신이 의미했던 것과 다른 뭔가를 할 것입니다.

UPDATE : touchesMoved:withEvent:UIResponder의 방법과 컨트롤러의보기 때문에 UIResponder이 방법은 또한이 뷰의 터치 이벤트에서 호출됩니다

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent *)event { 
    UITouch *t = [touches anyObject]; 
    CGPoint touchLocation = [t locationInView:self.view]; 
    NSLog(@"%@", NSStringFromCGPoint(touchLocation)); 
} 


- (IBAction)buttongDragged:(id)button withEvent:(UIEvent*)event { 
    NSSet *touches = [event touchesForView:button]; 
    [self touchesMoved:touches withEvent:event]; 
} 

알 수 있습니다.

+0

다른 곳에서 버튼을 드래그 할 수 있기를 바랍니다. 위의 코드를 더 편집했습니다. – Andrew

+0

나는 본다. 그런 행동을 구현하는 가장 좋은 방법인지는 모르겠지만 만약 당신이 절대적으로 이것을 필요로한다면 당신은 이벤트에서 손을 뗄 수 있습니다 - NSSet * touches = [이벤트 touchesForView : 발신자] – hoha

+0

그 코드는 어디에 둘까요? – Andrew

관련 문제