1

私は単純な 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 つの狂気ですか? それとも私は何か間違ったことをしましたか?

4

2 に答える 2

2

touchUpInside指をボタンの少し外側に動かすと、が発射されます。これは、人が大きくて不正確な指を持っているためです。

この動作を本当にオーバーライドしたい場合は、ハンドラーでタッチの場所を確認し、ボタンの外側でタッチした場合はハンドラーを直接touchUpInside呼び出します。touchUpOutsidebounds

于 2009-08-19T16:06:32.160 に答える
2

これはたまたまUIKitの通常の動作であることがわかりました。奇妙ですが、正常です。ユーザーは、タッチを「キャンセル」するために、指を十分に離す必要があります。指がタッチされたボタンから十分に離れていない場合は、touchUpInside イベントが発生します。これを言っているAppleからのテキストは見つかりませんでしたが、プレーンなUIButtonとIBActionを備えた新しいプロジェクトを含む、いくつかのプロジェクトで何度かテストしました。また、Apple のサンプル コードにも、これと同じ奇妙な動作が見られます。

于 2009-08-19T16:02:22.060 に答える