特定のいくつかのポイント (ボタンなど) を除いて、画面のすべての領域でのタッチを無効にしたいと考えています。つまり、ボタン以外をタップしたときに「touchesBegan」がまったくトリガーされないようにします。通話中
self.view.userInteractionEnabled = NO;
タッチを登録しないという望ましい効果がありますが、もちろん、ボタンをタップすることはできません。私は基本的に、画面に5点が触れていても、ボタンが機能することを望んでいます。つまり、すべてのタッチ入力が使い果たされ、ボタンは6番目を表します。
これは可能ですか?
ボタンの下に userInteraction を無効にしてビューを挿入しようとしましたが、ユーザーが画面をタップするとタッチが登録されます。タッチ登録を無効にする唯一の方法は、画面全体 (親 UIView) で無効にすることです。
更新:ジェスチャ認識機能を使用してすべてのタッチ イベントを処理し、条件を満たしていないイベントを無視しようとしました。これが私のコードです:
@interface ViewController : UIViewController <UIGestureRecognizerDelegate>
...
- (void)viewDidLoad
{
[super viewDidLoad];
UIGestureRecognizer *allRecognizer = [[UIGestureRecognizer alloc] initWithTarget:self action:nil];
allRecognizer.delegate = self;
[self.view addGestureRecognizer:allRecognizer];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
CGPoint coords = [touch locationInView:self.view];
NSLog(@"Coords: %g, %g", coords.x, coords.y);
if (coords.y < 200) {
[self ignoreTouch:touch forEvent:nil];
return TRUE;
}
return FALSE;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSLog(@"%i touch(es)", [touches count]);
}
ただし、画面はまだタッチを「読み取る」ため、5 本の指を下に置くと、6 本目の指でボタンを押すことはできません...