すべてのボタンがノートを再生するピアノのようなアプリを作成しています。私の UIButtons は Touch Down イベントでサウンドを再生します。問題は、あるボタンから別のボタンに指をスワイプするときに発生します (ピアノのキーに対して指をスワイプしてその間のすべての音符をキャプチャすることを想像してください)。指を離さない限り、別のボタンに触れることなく最初のボタンを「保持」します。
指を離さずに複数のタッチダウン イベントをキャプチャするにはどうすればよいでしょうか?
すべてのボタンがノートを再生するピアノのようなアプリを作成しています。私の UIButtons は Touch Down イベントでサウンドを再生します。問題は、あるボタンから別のボタンに指をスワイプするときに発生します (ピアノのキーに対して指をスワイプしてその間のすべての音符をキャプチャすることを想像してください)。指を離さない限り、別のボタンに触れることなく最初のボタンを「保持」します。
指を離さずに複数のタッチダウン イベントをキャプチャするにはどうすればよいでしょうか?
次のように、ボタンに追加のターゲットを追加できます。
myButton addTarget:self
action:@selector(yourMethodHere:withEvent: )
forControlEvents:UIControlEventTouchDragInside];
使用できるイベントの種類のリストを次に示します。
enum {
UIControlEventTouchDown = 1 << 0,
UIControlEventTouchDownRepeat = 1 << 1,
UIControlEventTouchDragInside = 1 << 2,
UIControlEventTouchDragOutside = 1 << 3,
UIControlEventTouchDragEnter = 1 << 4,
UIControlEventTouchDragExit = 1 << 5,
UIControlEventTouchUpInside = 1 << 6,
UIControlEventTouchUpOutside = 1 << 7,
UIControlEventTouchCancel = 1 << 8,
UIControlEventValueChanged = 1 << 12,
UIControlEventEditingDidBegin = 1 << 16,
UIControlEventEditingChanged = 1 << 17,
UIControlEventEditingDidEnd = 1 << 18,
UIControlEventEditingDidEndOnExit = 1 << 19,
UIControlEventAllTouchEvents = 0x00000FFF,
UIControlEventAllEditingEvents = 0x000F0000,
UIControlEventApplicationReserved = 0x0F000000,
UIControlEventSystemReserved = 0xF0000000,
UIControlEventAllEvents = 0xFFFFFFFF
};
次に、次のような関数を作成できます。
-(void) yourMethodHere:(UIControl *) button withEvent:(UIEvent *)event {
//do whatever
}
ボタンだけでタッチイベントを処理するだけでは、目的を達成できないと思います。UIPanGestureRecognizer
ユーザーのスワイプ指を処理するために使用することをお勧めします。また、どのボタンがスワイプされたかを確認し、対応する音楽を再生できます。
ジェスチャ認識エンジンに関するこのチュートリアルは、かなり役立ちます: http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more