UITapGestureRecognizer
은 바깥 쪽에서 터치가 발생했을 때만 해제를 유발하는 모든 항목 위에 놓여 있다고 생각할 수 있습니다. UIControl
범위입니다.
- (void)presentConfirm {
// whatever
self.dismissRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismiss:)];
self.dismissRecognizer = self;
[self.view addGestureRecognizer:self.dismissRecognizer];
}
- (void)dismiss:(UIGestureRecognizer *)gestureRecognizer {
// do stuff
[self.view removeGestureRecognizer:self.dismissRecognizer];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
CGPoint touchPoint = [touch locationInView:self.view];
return !CGRectContainsPoint(self.control.frame, touch));
}
는 기본적 터치가
UIControl
프레임 밖에서 일어나는에만
dismiss
방법을 트리거하고 같은
이
뭔가 (내가 당신의 통제가 self.control
으로 참조되는 가정).
은 또한 당신이
dismissRecognizer
속성을 필요 해요 것은
@property (nonatomic, strong) UITapGestureRecognizer *dismissRecognizer;
로 선언하고 또한 당신의 컨트롤러가
UIGestureRecognizerDelegate
프로토콜을 준수 함을 선언해야 경고를 방지 할 수 있습니다.
이 방법은 침입성이있는 전체 창을 덮는 뷰에 배치해야합니다. –
글쎄, 버튼을 그리는 것은 모든 터치에서 if 표현식을 검사하는 것보다 천 배나 더 많은 비용이들 것입니다. – nemesis
침입 형 프로젝트에 통합하기 위해 내 코드를 다른 사람에게 제공하고 싶습니다. 가능한 경우 다른 코드를 엉망으로 만들고 싶지 않습니다. –