사용자 지정보기 클래스가 있습니다. 내보기 컨트롤러 내에서이보기 개체에 Tap 제스처 인식기를 추가합니다. 이제 탭 제스처의 핸들러에서 뷰 클래스의 drawRect에서 가져 오려고하는 뷰 객체의 속성을 설정하고 있습니다. 이제 놀랍게도 "handleGesture"& "drawRect"에서 뷰 객체를 인쇄 할 때 두 개의 다른 객체를 얻습니다. 이 때문에 내 drawRect 내부 조건이 실행되지 않습니다. 그 이유는 무엇일까요?사용자 지정보기에서 UITapGestureRecognizer 처리
상태 UIGestureRecognizerStateBegan에 제공되지 않습니다. 항상 UIGestureRecognizerStateEnded 안에 들어갑니다.
// Adding Gesture in my view
MyCustomView *customView= [[[MyCustomView alloc] init] autorelease];
UIGestureRecognizer *GestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
[customView addGestureRecognizer:GestureRecognizer];
[GestureRecognizer release];
// Handling tap on my view
- (void)handleGesture:(UIGestureRecognizer *)GestureRecognizer; {
MyCustomView *aView= (MyCustomView *)GestureRecognizer.view;
switch (iGestureRecognizer.state) {
case UIGestureRecognizerStateBegan:
NSLog(@"Began");
[aView setNeedsDisplay];
aView.touchDown = YES;
break;
case UIGestureRecognizerStateEnded:
NSLog(@"Ended");
aView.touchDown = NO;
[aView setNeedsDisplay];
break;
default:
break;
}
}
// Inside my view class
- (void)drawRect:(CGRect)iRect {
if (self.touchDown) {
// Do something here
}
}
약간의 리팩토링을 원한다면 사용자 정의보기에서 고유 한 제스처 인식기와 handleGesture 구현을 만들 수 있습니다. 그렇게하면 뷰 내부에서이 논리를 모두 처리 할 수 있으므로 사용중인 touchDown 플래그가 필요하지 않을 수 있습니다. 아마도 당신은 drawRect를 재정의 할 필요조차 없앨 수 있습니다 : – picciano
예 ... 저는 그렇게 생각하고 시도했지만 도움을주지 않았습니다. 이유는 내 사용자 정의보기의 다른 개체를 만드는 내 "handleGesture"안에 내 테이블을 다시 그려야합니다. 그러면 모든 것이 엉망이됩니다. – Abhinav
아, 더 많은 이유가 컨트롤러에서보기로 제스처 인식. 어쨌든 사용자 정의보기의 추가 인스턴스를 생성해서는 안됩니다. – picciano