私は単純な UIButton を持っていて、ユーザーがそれに触れたときに何かをしたいのですが、指をボタンの外に動かして画面に触れません。UIControlEventTouchUpOutside イベントをリッスンする必要があるようです。
私のView Controllerでは、これを行いました:
UIButton *bt = [[UIButton alloc] initWithFrame:rect];
[bt setBackgroundColor:[UIColor whiteColor]];
[bt addTarget:self action:@selector(onTouchUpOutside) forControlEvents:UIControlEventTouchUpOutside];
[self.view addSubview:bt];
および対応するアクション メソッド:
- (void)onTouchUpOutside {
NSLog(@"touchUpOutside");
}
今何を推測しますか?ボタンに触れてから指をその外側にドラッグし、画面に触れないようにすると、メッセージはログに記録されません。実際、指が実際にはボタンの上になくても、UIControlEventTouchUpInside イベントが発生したことがログに記録されます。触っている間、そのボタンの周りの幅と高さの約 150% の指を動かすことができるようで、離すと指がボタンの中にあったことがわかります。しかし、非常に遠くに移動すると (= 十分に離れた場所に移動すると)、「touchUpOutside」というログ メッセージが表示されます。それは、-touchesMoved の遅延など、Apple のもう 1 つの狂気ですか? それとも私は何か間違ったことをしましたか?