問題タブ [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.
ios - hitTest:withEvent メソッドを使用する場合 - タップが開始されたかどうかを判断します
カスタム ビューで hitTest:withEvent をオーバーライドしようとしています。これは、多くのサブビューを持つコンテナー ビューです。
この「superView」にはジェスチャ認識機能が付属しています。このビューの上には、多くのサブビューがあります (サブビューはますます多くなります)。どのビューがイベントを取得する必要があるかを決定するために、hitTesh:withEvent をオーバーライドすることにしました。ジェスチャーをトリガーします。
私が抱えている問題は、サブビューでタップジェスチャが初期化される場合に、hitTest がスーパービューを返すことです。その場合、タップアクションを「さかのぼって」無視し、スーパービューで hitTest:withEvent を再度「呼び出し」たいと思います。スーパービューは、「真の」レスポンダーをこのイベントに渡すことを決定できます。
どうすればいいですか:
例:
ios - ジェスチャ認識エンジンがキャンセルされた後にプログラムで hitTest:WithEvent を開始し、別の UIView を返してイベントに応答する
私はhitTest:withEvent自己を返すようにオーバーライドしています(一番下のビュー)-
戻るselfと、私のビューはタッチイベントに応答し、ジェスチャレコグナイザーを開始します。
ジェスチャがキャンセルされた場合、またはいくつかの条件が発生した場合 - 手動で開始hitTest:withEventしてから別のビューに戻り、発生したイベント/タッチの同じシーケンスを処理したいと考えています。これはhitTest:withEvent、ジェスチャ ビューが返され、その状態が に変更された後にジェスチャ レコグナイザが開始されるため、必要beganです。
これを行う方法がわかりません-サブビューを手動で呼び出すことを考えました
しかし、私はイベントパラメータを持っていません (ジェスチャーはそれを受け取りました)
ios - remoteControlReceivedWithEvent の Nil 値
私はマスター/ディテールアプリを持っています。の各セルをタップすると、オーディオ ファイルをダウンロードして再生できる場所にtableView移動MasterViewControllerします。複数のセルからの異なるファイルが同時に再生されないように、インスタンスを単一にDetailViewController保つのに問題がありました。AVAudioPlayerそれを修正する前は、remoteControlReceivedWithEvent問題なく動作していて、すべてのビュー コントローラーでイベントを管理できました。
その問題を修正すると、プレーヤーは同時に 1 つのファイルしか再生しないため、たまたま に戻ってMasterViewController別の行を選択し、別のセルに入って再生を開始すると、最初のファイルが停止し、2 番目のファイルが開始されます。 . しかし、現時点での問題は、ユーザーが他の場所でDetailViewController,remoteControlReceivedWithEventが呼び出されているときにコントロールセンターを使用しようとしているが、値がnilであるため、何も起こらないことです。これは、現在再生中の行を検出し、次のようcellForRowAtIndexPath:に強調表示できる間です。MasterViewController
ただしremoteControlReceivedWithEvent、インデックスにアクセスできないため、それを見つけることはできません。
などは既に入れてありますが、現在再生中のファイルがどれcanBecomeFirstResponderか分からないだけだと思います。これを別の VC またはバックグラウンドで試してみても、その外側ではなくtable view、すべて正常に動作します。DetailViewController
そして私のAudioManagerクラスでは:
markAsNowPlaying手動で行う必要がありますか、または適切なインデックスを見つけて取得を回避するために使用できるデリゲート メソッドはありnilますか?
ios - UIViewがタッチイベントの受信を停止する方法は?
私は、ユーザーが複数の UIView をすばやくタッチしてスワイプすることが期待されるアプリに取り組んでいます。各 UIView は、ユーザーの指が到達するとアクションを実行することになっています。私は多くのビューを持っているので、タッチがその境界内にあるかどうかを確認するために各ビューを反復処理するという典型的なことはできません-ラグが多すぎます. あるビューから別のビュー (最初のビュー以外) にタッチ イベントを取得する他の方法はありますか? タッチイベントをキャンセルする方法があるのではないかと思いましたが、検索したところ、今のところ空になっています。
私が抱えている大きな問題の 1 つは、View Controller にタッチ処理を実装すると、touchesBegan が最初のタッチでのみ起動することです。ユーザーが何かに触れてから、最初の指を動かさずに他の何かをタップすると、そのタップはtouchesBegan にも touchesMoved にも記録されません。しかし、UIViews 自体にタッチ処理を実装すると、ビューがタッチを登録すると、ユーザーが指を上げて移動しないと、最初のビューの周りのビューはタッチを登録しません。ユーザーが指を離してから元に戻した場合にのみ、周囲のビューがタッチを登録します。
私の質問は、2 つのビューが並んでいて、タッチ処理コードがビューに実装されているとしましょう。ビュー 1 に指を置きます。次に、ビュー 2 に指をスライドさせます。何が必要ですか?ビュー1で開始され、「終了」しなかったタッチをビュー2に登録させるにはどうしますか?
ios - iOS: 1 つのビュー コントローラーに別のアクションをミラーリングする方法
ビューコントローラーを「ミラーリング」しようとしています:
- アプリはView Controller 1(クラスAの)をインスタンス化します
- app は別の UIWindow (外部ディスプレイ、Airplay または物理コネクタ経由) で View Controller 2 (同じくクラス A) をインスタンス化します。
- ビュー コントローラ 1 が受信するタッチ イベントは、ビュー コントローラ 2 で模倣する必要があります。
vc1での領域の変更やスクロールなどをキャッチし、その領域を設定するかその位置にスクロールするようにvc2MkMapViewsに指示し、vc1のUIControl IBActionsでも同じアクションを呼び出すvc2など
UITableViewsこれは単純なケースで機能しますが、問題は、展開/縮小などのカスタムのようなものを持つ複雑なビューコントローラーに伴いUITableViewCellsます。考えられるすべてのデリゲート/アクションを実装し、オブジェクトの束にそれらがすべきことを認識させる必要があることに気づきましたこれをまったく再利用可能にしようとすると、これは間違っているように思えます。
vc1 のサブビュー ツリーをobjc_setAssociatedObject()たどって、View Controller インスタンス内の UIResponders を互いに関連付けるために使用してみましたがUIResponder、イベントを模倣するために vc2 を検索するために、vc1 のすべてのデリゲート/アクションをキャッチする必要があります。これを行うには、もっと簡単な方法が必要です。イベントをサブクラス化UIWindowしてオーバーライドsendEventし、外部ディスプレイにも送信しようとしましたが、送信時に外部ディスプレイが何もしなかったためUIWindow、それぞれに元のイベントにUIEvent関連付ける情報が含まれているようです。UIWindowUIWindow
ミラーリングを素敵なサブクラスなどに抽象化して、すべてのView Controllerに特別なケースのコードを散らかさなくて済むようにするにはどうすればよいでしょうか? UIView のタッチ イベントをスウィズルすることを考えましたが、UITouches と UIEvents は元の UIWindow に関連付けられており、UIEvent は独自の作成方法を提供していないように見えるため、それが役立つかどうかさえわかりません。イベント。
注: 私がやろうとしているのは、デフォルトの Airplay ミラーリングではありません。これは、外部ディスプレイ エクスペリエンスでフル ディスプレイの解像度とサイズを利用できるようにするためです。そのアイデアは、iPhone アプリがデバイス自体で動作できるようにする (つまり、幅よりも高い) と同時に、そのディスプレイに合わせた外部ディスプレイでのエクスペリエンスを提供する (高さよりも幅が広く、解像度が高く、より読みやすい HDTV 対応の形式で情報を表示します)。
考え?
ios - すべての UISlider イベントを 1 つのメソッドにリンクするにはどうすればよいですか?
ビューコントローラーに次のメソッドがあります。
すべてのイベントを 1 つずつコントローラーにリンクする必要がありますか?
ios - iOS - UIScrollView hitTest にタッチが含まれていない
内部に UIViews を含む UIScrollView があります。UIScrollView では、2 本指スクロールが有効になっています。UIView にはそれぞれ panGestureRecognizer があります。以下の機能が欲しいです。
ツータッチパンなら→スクロール。
UIView でシングル タッチ パン && タッチした場合 --> UIView の panGestureRecognizer を起動します。
UIScrollViewのhitTestを上書きすることでこれを行いたいです。タッチ数が 1 より大きい場合は、UIScrollView を返してスクロールできるようにします。タッチ数が 1 の場合、通常の hitTest の結果を返し、UIView の panGestureRecognizer を起動する可能性があります。しかし、私の UIScrollView の hitTest コードには一切手を加えていません! (私は 2 本指でのスクロールに成功しましたが、hitTest にはタッチがありません。)
ios - MKMapView の選択の変更を (きれいに) 防止する
MKPinAnnotationViewカスタム コールアウトを表示するカスタム サブクラスがあります。その注釈内でタッチイベントを処理したい。
私は実用的な解決策(以下)を持っていますが、それは正しくありません。performSelector: .. withDelay:私は、使用するときはいつでも、システムを操作するのではなく、システムと戦っているという経験則があります。
MKMapView の積極的なイベント処理と注釈選択処理のための適切でクリーンな回避策はありますか?
私の現在の解決策:
(注釈選択クラスのすべてのコード)
私は独自のヒット テストを行っています (これがないと、マップ ビューがイベントを消費するため、ジェスチャ認識エンジンが起動しません。
setSelectedオーバーライドされたときに選択解除を無視できるように、選択もオフにしていることに注意してください。
私が気に入らないのはコメント1の行ですが、シータ ディレイド ファイアの最後はかなり毛むくじゃらです。スーパービュー チェーンをさかのぼって mapView に到達し、選択がまだ適切に行われていることを確認できるようにする必要があります。
と
これはすべて、マイナス面がなくても機能するようです (他のソリューションで見たちらつきのように。比較的簡単ですが、正しくないと感じます。
誰もがより良い解決策を持っていますか?