問題タブ [uievent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
11348 参照

ios - UIGestureRecognizerはタッチを受け取りますが、UIControlにも転送します

のaがタッチイベントを受信できるようにするだけでなく、別のアンダーレイ/オーバーレイも同じタッチイベントを受信するようUIGestureRecognizerにするにはどうすればよいですか?UIViewUIView

私が次のビューを持っているとしましょう-hierachie: ヒエラチエ落書きを見る

ビューA(青)とB(赤)は両方とも同じスーパービュー(灰色)のサブビューです。言い換えれば、彼らは両方とも兄弟であり、順序はそれらのどちらが他方をカバーするかを決定します。

オプション1:ビューB(赤)には、UIButtonサブビューとしてレギュラーがあります。オプション2:ビューA(青)には、UIButtonサブビューとしてレギュラーがあります。

説明のためにオプション1を指定します。ビューA(青)にはUITapGestureRecognizer(またはそれ以上の他のUIGestureRecognizers)が添付されています。UIButtonビューA(青)がその領域ですべてのタッチを受信するだけでなく、ビューA(青)がその領域でそれらのタッチを受信することを確認するための最もエレガントなアプローチは何でしょうUITapGestureRecognizerか?

可能であれば、解決策には、UIButton-classを拡張し、ボタン自体からイベントを手動で転送することは含まれません。ビューBには、ボタンだけでなく、より多くのコントロールが含まれていると想像してください。これらのコントロールはすべて、ビューAがのタッチを受信できるようにする必要がありますUIGestureRecognizer

両方がタッチを受ける限り、これらのビュー(AまたはB)のどちらが最初に来るかは気にしないので、2つのオプションを提供しました。

これまでの私のアプローチはすべて、突然行き止まりになりました。たぶん、カスタムレスポンダーチェーンは素晴らしい解決策でしょうか?UIKit//スタック全体にエレガントなソリューションが必要だと私は考え続けていUIEventます。UIResponder

0 投票する
1 に答える
1380 参照

ios - UIResponder チェーンの説明が必要

UIButtonsこの状況で, UIScrollViewsetcを動作させるのに問題があります:

UIViewControllerのルートコントローラーであるbaseがありUIWindowます。そのレイヤーの上にUIViews、「中間レイヤー ビュー」と呼ぶ別のレイヤーを追加しました。その上にUIView、オーバーレイ オブジェクト用にもう 1 つ追加しました。

中間層ビューは、定期的に異なるビューに変更されます。使用UIViewするのはUIViewController、NIB ファイルによって作成された です。これが例です

今、私が画面に触れると、最初のレスポンダーは明らかに、触れOverlayViewられた の です。タッチ入力はビューチェーンを上りますが、中間層ビューとそれを完全にスキップしているようです。ルートにまっすぐジャンプします。UIResponderOverlayViewUIEventUIRespondersUIViewUIViewController

ここで何が起こっているか知っている人はいますか?

どういうわけか2つ作成することで解決できUIEventsますか?1 つはオーバーレイ ビュー用で、もう 1 つは中間層ビュー用ですか? それは可能ですか?もしそうなら、どのように?

どんな助けでも大歓迎です。ありがとう、リッチ

0 投票する
1 に答える
835 参照

iphone - イベント内のUIButtonタッチアップ、境界変更?

UIButtonそれで、昨夜遅くに数時間を無駄にした後の興味深い行動を発見しました。私はおそらく過去にこれに出くわしたことがありますが、思い出せません。これまでのところ、この動作の説明を見つけることができませんでした。これに関する情報があれば教えてください。

のインスタンスを作成し、UIButtonそのアクションを に設定しUIControlEventTouchUpInsideます。ここで、実行中のアプリでボタンを押したままにし、ボタンから離れて、指を動かしたりドラッグしたりすると境界がどのように変化するかを確認します。タッチは、ボタンの元のフレームである境界からかなり離れた場所で認識されます。

これにより、locationInView: を使用してコードを実装したアプリでかなりの問題が発生し、ボタンのスーパービューであるの indexPath を決定しましたUITableViewCell

indexPath を決定するための私の 2 つの代替ソリューションは次のとおりです。

  1. UITableView の: メソッドUITableViewCellとともに、ボタンのスーパービューのスーパービュー ( ) を使用します 。indexPathForCell

  2. むしろUIControlEventTouchDown 、ボタン アクションを指定するときに使用します。

誰かがこれを参考にするか、問題の解決に貢献できることを願っています。

0 投票する
2 に答える
4147 参照

objective-c - CCTouchesBegan - CCTouchesEnded には両方の座標が必要です

まず第一に、私は Cocos2D と Obj-C を初めて使用するので、このような単純な問題に遭遇することがあります。私の問題は次のようになります。画面にスプライトがあり、ユーザーはスプライトの上部に触れ、押したまま少し上に移動してから離す必要があります。帽子をかぶったプレイヤー スプライトを想像してみてください。帽子に触れて指を少し上に動かし、帽子をその方向に飛ばす必要があります。これを実現する最良の方法は何ですか?

私がこれまでに得たものはこれです:

CCTouchesBegan の位置を特定する別のメソッドを作成し、その値を CCTouchesEnded メソッドに渡して、角度を計算し、帽子を飛ばす必要がありますか? または、上記の方法自体でタッチが開始された位置を特定できますか?

回答ありがとうございました:)

0 投票する
0 に答える
689 参照

iphone - タッチイベントの再発行

タッチを監視してから消えるオーバーレイビューを作成しようとしていますが、ビューの下にあるものにタッチイベントを転送します。

私のテストアプリには、ボタンが入ったビューがあります。オーバーレイビューを別のサブビュー(基本的にはボタンの兄弟)として追加します。これは画面全体を占めます。

私が試した両方のソリューションで、オーバーレイは状態を保持して、タッチにどのように反応するかを決定します。touchesBeganイベントを受信すると、touchesCancelledまたはtouchsEndedを受信するまで、オーバーレイはhitTestまたはpointInsideへの応答を停止します。

最初のアプローチとして、イベントを再発行してみました。

ただし、ボタンは再発行されたイベントに応答しませんでした。

2番目のアプローチは、hitTestを使用してオーバーレイの下のビュー(マイボタン)を検出し、touchesXXXメッセージを直接送信することでした。

ボタンは(ログによると)検出されますが、touchesXXXを呼び出してもボタンはまったく反応しません。

ボタンがtouchesBeganの直接呼び出しに応答しないため、他に何を試すべきかわかりません= /

0 投票する
1 に答える
2860 参照

iphone - Touch イベントが発生したときに UIButton の青色を無効にする

ボタンが押されたときに、その外観を変更したくありません。触ると青くなります。IBに入り、「ハイライトで画像を調整する」のチェックを外してみましたが、何も変わらないようでした。また、「ハイライトにタッチを表示」のチェックを外しています。これを無効にするにはどうすればよいですか? ご意見ありがとうございます。

0 投票する
1 に答える
319 参照

objective-c - C++ クラスでの UI イベントの受信

Xcode for iOS で Objective-C++ を書いています。私のプロジェクトは、ほとんどが C++ クラスで、最高レベルのいくつかの Objective-C クラスです。私の C++ クラスには Objective-C UI 要素が含まれており、UI イベントを受け取るために必要です。UI 要素が C++ メンバー関数を直接呼び出すことは可能ですか? つまり、C++ 関数のこの呼び出しに相当するものがあります。

私が理解していることから、@selectorここでは役に立ちません。コントロールがメンバー関数を呼び出す別の方法が必要です-存在しますか?

今のところ、UI イベントを受け取り、C++ クラスを適切に呼び出す C++ クラスのメンバーである Objective-C レシーバー クラスを使用していますが、これはこれを達成するための回り道のようです。私が説明したことが不可能な場合、私がやろうとしていることを行うためのより良い方法はありますか?

0 投票する
1 に答える
720 参照

objective-c - カスタム UIControl は常に nil UIEvent オブジェクトを送信します

touchesBegan/Moved/Ended/Cancelled イベントを監視する UIControl から派生したクラスがあります。これらのイベント内で、次のようにスーパー レスポンダーと次のレスポンダーの両方で同じイベントを呼び出します。

テーブル ビューを所有する親コントロールがあります。テーブル ビューの各セルには、カスタム コントロールが 1 つずつ含まれています。クリックに応答するために、コントロールを作成し、次のようにテーブル ビュー セルに追加するときに、コントロールにセレクターを割り当てます。

親コントロールのセレクターは次のようになります。

UIEvent が常に nil である理由を教えてもらえますか? カスタム UIControl の代わりに UIButton のインスタンスを使用すると、UIEvent は nil ではありません。さらに、コントロールで sendActionsForControlEvents を呼び出さないと、親コントロールはイベント通知を受け取りません。

0 投票する
0 に答える
1086 参照

ios - iOS デバイスの UIView から外部画面の UIView に UIEvent を送信する

AirPlay を使用してアプリを開発していますが、既存の多数のカスタム UI 要素と互換性を持たせるために、メイン画面のタッチを外部画面の UI のタッチとして機能させる方法が必要です。UI 要素を再構築することは、あるビューから別のビューにタッチを変換する方法を見つけるよりも桁違いに困難です。

外部画面には、操作を表す一種のマウス ポインターが表示されます。これは、ユーザーが操作を行うために画面上で参照ポイントが必要になるためです。これは、ユーザー インターフェース ガイドラインのハードルを作成する可能性がありますが、その山にたどり着いたら、その山を越えます。願わくば、このアイテムをマウスらしくないようにする方法を見つけられることを願っています。ユーザーは、一種のトラックパッドとしてデバイスを操作します。

タッチイベントをキャッチするためにサブクラス化された「sendEvent」を持つデバイス画面上のウィンドウを使用しています。入力を受け取る必要があるビューのビュー階層を手動でたどろうとしています。話したいビューを見つけることは難しくありません。UIControl ベースのクラスでは、「sendActionsForControlEvents」を呼び出して、コントロールに適切なメッセージを送信できます。これには多少の愛撫が必要かもしれませんが、今のところそれは主な問題ではありません。

touchesBegan、touchesMoved などの UI イベントについては、UIEvent 情報を偽造する適切な方法がありません。UIEvent がない限り、これらの関数を呼び出すことはできず、UIEvent オブジェクトを作成する方法がないようです。sendEvent からの UIEvent には、(少なくとも) セカンダリ スクリーンのポインター位置と一致する位置がないため、単純に渡すだけでは、必要なものが得られません。

この情報を合成する正当な方法はありますか?

0 投票する
1 に答える
716 参照

ios - hitTest:withEvent: で UIControlEventTouchUpInside をインターセプトします。

私はこのすばらしいチュートリアルに従い、最終的に 3 つの独立した行のスクロール可能なインターフェイスを実装することができました。

ただし、そのチュートリアルの鍵はメソッドの使用であるため、問題が残っています。

スクロールビュー領域外でもスクロールを処理するため。実際、私の行は UIButtons で満たされ、それらの TouchUpInside イベントはヒット イベントと混同されました。このメソッドにこれらのイベントを認識させて拒否させ、正当なデリゲートに伝達させる方法はありますか?