作成中の小さなシンセサイザー キーボードでタッチ イベントを設定しようとしていますが、作成したボタンに「タッチ ダウン」イベントしか接続できません。
ボタンに「タッチ」を設定するにはどうすればよいですか? 誰かがキーを押し下げて、他のボタンに指をスライドさせたとしましょう...他のキーはピアノのように「タッチ」で演奏されると思いますよね? Interface Builder でこれを実現する方法がわかりません。
どんな助けでも素晴らしいでしょう - ありがとう! ショーン
作成中の小さなシンセサイザー キーボードでタッチ イベントを設定しようとしていますが、作成したボタンに「タッチ ダウン」イベントしか接続できません。
ボタンに「タッチ」を設定するにはどうすればよいですか? 誰かがキーを押し下げて、他のボタンに指をスライドさせたとしましょう...他のキーはピアノのように「タッチ」で演奏されると思いますよね? Interface Builder でこれを実現する方法がわかりません。
どんな助けでも素晴らしいでしょう - ありがとう! ショーン
touchDown イベント以外にも接続する必要があります。目的を達成するには、「ダウン」イベントで最初のタッチをリッスンするだけでなく、アプリに「移動」イベントと「タッチアップ」イベントを認識させる必要もあります。ユーザーの指の動きに適切に反応できます。さらに、ボタンのサブクラス内にすべてのコードを配置するなどして、これらの動きに各ボタンを個別に応答させることは困難です。
代わりに、一度にすべてのボタンを確認し、ユーザーが行っているタッチを受け取り、それらのタッチに基づいて何をすべきかを決定できる単一のコード ポイントを作成する必要があります。これは、すべてのボタンを含むビュー コントローラーのタスクになります。
このView Controller内で、、、およびメソッドを利用touchesBegan:
できtouchesMoved:
ますtouchesEnded:
。次に、ヒット テストを使用して、どのボタンがタッチされているかを確認する必要があります。ボタンのテストを実行するにはconvertPoint:
、hitTest:withEvent:
とを参照してください。pointInside:withEvent:
基本的に、これらのタッチ メソッド内で、 で新しいボタンが押されたtouchDown:
とき、 でタッチが新しいボタンに移動したとき、タッチしたtouchesMoved:
ばかりのボタン、 でユーザーがタッチを止めたときを追跡しますtouchesEnded:
。これらすべてを組み合わせることで、各指の動き、どのボタンが終了したか、それらのボタンのサウンドをいつ再生するかを追跡するコードを記述できます。
繰り返しますが、すべてのコードをボタン アクションから個々のタッチ ハンドラーに配置しようとしないことをお勧めします。代わりに、View Controller を使用して、すべてのボタンのタッチを一度に管理します。
お役に立てれば。
UIControl クラス リファレンス - UIControlEventsを確認してください。
あなたは探しているUIControlEventTouchDown
//For example:
UIButton *myButon = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButon addTarget:self action:@selector(methodName) forControlEvents:UIControlEventTouchDown];
iOSのイベントを調べたい
UIControlEventTouchDown
現在ボタンまたは領域を押している間にどちらが再生されるかは、あなたが望むように聞こえます。逆にUIControlEventTouchUpInside
、ボタンまたは領域を持ち上げると、どちらが再生されるかを使用できます。
何かのようなもの[results addTarget:self action:@selector(playSound) forControlEvents:UIControlEventTouchUpInside];
これは、各タッチに対応する上下のアクションがあることを前提としています。
ピアノの上で手を動かすようなものを探している場合は、おそらくパン ジェスチャを使用して、スワイプの位置を追跡することができます。