問題タブ [nsevent]

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 投票する
2 に答える
1340 参照

macos - OSXでscrollWheelエラスティックスクロールを実装するにはどうすればよいですか

NSScrollViewに似ていますが、CoreAnimation CAScrollLayer/CATiledLayerに基づくカスタムビューを作成しようとしています。基本的に、私のアプリは多くのほぼリアルタイムのCGPath描画を必要とし、シェイプレイヤーを使用してこれらのパスをアニメーション化します(これは、GarageBandが記録中にアニメーション化する方法に似ています)。私が作成した最初のプロトタイプはNSScrollViewを使用していましたが、1秒あたり20フレームを超えることはできませんでした(理由は、scrollEventが発生するたびに描画によってNSRulerViewが更新され、呼び出し全体が-[NSClipViewscrollToPoint]から-[に流れるためです。 NSScrollView ReflectScrolledClipView:]は非常に高価で非効率的です)。

スクロールメカニズムとしてCAScrollLayerを使用し、従来のdocumentView(無限スクロールオプション用)としてCATiledLayerを使用するカスタムビューを作成しました。これで、60fpsに近づくことができます。ただし、scrollWheelエラスティックスクロールを実装するのに苦労しており、その方法がわかりません。これが私がこれまでに持っているコードです、そして誰かがelasticScrollingを実装する方法を教えてくれたら本当にありがたいです。

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

objective-c - Cocoa で画面上のグローバル マウスの位置を観察しますか?

マウスが動いたときに通知を受け取り、画面上の位置を取得したいと思います。私はこれを試しました:

ただし、これは、マウスがアプリのウィンドウ内にある場合にのみ機能するようです。離れるとすぐに通知されません。再び窓に入るまで。このイベントはグローバルであるべきではありませんか?

アップデート:

問題のコードを抽出し、別のサンプル プロジェクト ( Dropbox-Link ) を作成しました。念のために言うと、他に干渉するものは何もありません。上記のコードのみのクリーンなプロジェクトapplicationDidFinishLaunching:です。私は同じ結果を得て、それは本当に奇妙です。YouTube に動画をアップロードしました: http://www.youtube.com/watch?v=I3AKgmURaMk

これらは私の観察です:

  1. アプリを起動した直後は、マウスをどこに動かしてもイベントがまったく配信されません。
  2. アプリのウィンドウをクリックすると、何らかの形でイベント配信がアクティブになります。これで、マウスをどこに動かしても NSMouseMovedMask イベントを受け取ります (これが私が達成したいことです)。
  3. クリックして Xcode に戻っても、何も変わりません。私はイベントを取得し続けます。
  4. ただし、フォーカスをアプリに戻すと、奇妙な動作が発生します。マウスを Xcode の上に移動すると、ウィンドウの一部の部分でのみイベントが発生しますが、一部の部分はイベントを吸収しているように見えます。具体的には、エディターまたはログ ビューでイベントを受け取りません。マウスを灰色の分割ビューセパレーター領域 (タブバーが埋め込まれている) の上に移動している間だけ、それらを受け取ります。
0 投票する
1 に答える
1563 参照

objective-c - mouseEntered イベントの NSButton 画像の影

画像を含むボーダレス NSButton があり、ButtonEffect クラスでサブクラス化されて、mouseEntered および mouseExited イベントを検出します。私の目標は、マウスがボタン領域に入ったときに画像の端だけが光るようにすることです。2 つの異なる画像 (1 つは影付き、もう 1 つは影なし) を使用してこれを達成できることはわかっていますが、これは 1 つの画像で行う必要があります。

mouseEntered イベントで達成したいことの例を次に示します。 マウス入力ボタンエリア

カーソルがボタン領域を離れた後の外観は次のとおりです。 マウスから出たボタン領域

これは、セルの背景を設定することによる私の試みですが、ボタン領域全体の色が変わります。

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

objective-c - Objective-C でキーボードのキーを 1 つの目的だけに設定する

ここで、キーボードのキーに 1 つの目的だけを与える方法を見つけるために、少し助けが必要です。私は説明します: 現在、キーボードのキー 1 ~ 8 には、 および に関連付けられたアクションがNSEventありFirstResponderます。メソッドを呼び出します。問題は、アプリ内のどこにいても 1-8 を押してこのメ​​ソッドを呼び出せるようにする必要があるため、フォーカスが TextField に設定されているときにこれらのキーを使用できることです。1 ~ 8 に通常の目的を持たせたくありません。数字パッドは、数字を使用できる場所になります。私の質問:私がやりたいことをする方法があるのだろうか?

前もって感謝します!

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

objective-c - NSEvent addGlobalMonitorForEventsMatchingMask:ホットキーの傍受

Control+で始まり、文字で終わるホットキーをインターセプトしたいShift(必須)。
私は次のコードを持っています:

ControlShiftユーザーが+文字を押したかどうか、およびユーザーがどの文字を押したか を確認するには、コードに何を追加する必要がありますか?
コードNSLog(@"pressed!");は、上記の内容が当てはまる場合にのみ実行されます。

これは私が探しているものの擬似コードです:

したがって、ユーザーがControl+ Shift+1を押すと、1つのことを実行し、Control+ Shift+2を押すと、他のことを実行します...

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

macos - OS Xでcapslockキーのキーアップまたはキーリリースを検出する方法は?

OS X のキーストロークの検出に問題があります。キーボードのキーが押されるたびに、キーダウンとキーリリースまたはキーアップを検出する必要があります。でアプリケーションのイベント処理チェーンをインターセプトする場合、これはかなり簡単です[ NSEvent addLocalMonitorForEventsMatchingMask: handler: ]。これにより、通常の印刷キーや、shift、ctrl、alt、および cmd キーの検出に使用できるNSEventさまざまなイベント タイプのを傍受して変更できます。実際、モディファイア フラグは Shift、Ctrl、Alt、および Cmd キーのキー アップとキー ダウンの両方で変化するため、 とを一緒にチェックすることで、これらのキーのキー アップおよびキー ダウン イベントとして使用できます。NSKeyUpNSKeyDownNSFlagsChangedNSFlagsChanged[NSEvent modifierFlags][NSEvent keyCode]

ただし、Capslock は異なります。capslock 修飾子は実際にはキーが押されたときにのみ機能するため、capslock を押すと、キーがNSFlagsChanged離されたときではなく、capslock が押されたときにのみ取得されます。andはNSKeyUpNSKeyDowncapslock、shift、ctrl などの修飾キーでは出力されません。

Capslockキーアップイベントを取得するための方法、おそらく低レベルのインターフェースを提案できますか? kqueuesなどを使用する必要がありますか?

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

cocoa - 連続して複数回クリックした場合の NSTextField の動作を変更する

カスタム ビューによってネストされたNSTextFieldがあり、テキスト ノード MindNode (下の画像を参照) の動作と同様に、連続した複数のクリック (ダブル クリック、トリプル クリックなど) のデフォルトの動作を変更したいと考えています。

最初のクリックでテキスト フィールドを「アクティブ化」してから、最初から続行します (イベントのクリック数をリセットするなど)。

次のアイデアがありますが、それらを実装する方法と、実際に意味があるかどうかはわかりません。

  • どういうわけか時間を使用して変更+[NSEvent doubleClickInterval]し、2 回目のクリックを遅くします。
  • プログラムでクリック数を減らしますか?
  • を使用して NSTextField を選択不可-hitTest:にし、クリックをスーパービューに転送し、テキスト フィールドのパラメータを変更して、次のクリックを受け入れます。この場合、2 回目のクリックのクリック数は 2 のままです。
  • オーバーライド-mouseDown:し、super を呼び出さないでください。これにより、NSTextField の選択機能が壊れます。

私が見落としていた、これを達成するためのより簡単な方法があることを願っています。

回答ありがとうございます。

以下は、問題をグラフィカルに表現したものです。 NSTextField の複数回クリックの動作を変更する

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

objective-c - NSNotification / NSEvent がどのアプリケーションから来たかを認識する方法はありますか?

keyDownグローバルなイベントを聞き始めました。イベントが発生したアプリケーションから情報を取得する方法はありますか?

ハンドラーはNSNotificationインスタンスを受け取り、NSEventその一部です。どうにかしてそれらのオブジェクトからその情報を抽出できますか?

リスニング スニペット:

観察者:

アップデート

グローバル キー ダウンは、特定のアプリケーションからは送信されません。実際に必要だったのは、イベント ハンドラーで現在アクティブなアプリケーションを確認することです。

これにより、必要な情報が返さNSDictionaryれます。

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

cocoa - CGWindowListCopyWindowInfo を使用して、どのウィンドウのマウス ポインターが上にあるかを調べることは可能ですか?

CGWindowListCopyWindowInfo を使用すると、マウス ポインターがリストされているウィンドウのいずれかの上にある場合に解決できますか?

私が抱えている問題は、CGWindowListCopyWindowInfo によって提供されるウィンドウの境界が左上の原点に基づいていることです。しかし、何か...

左下の原点ベースです。

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

macos - マルチタッチ ジェスチャに GlobalMonitorForEventsMatchingMask を追加するにはどうすればよいですか?

すべてがうまく機能します -ローカルで- ...

NSLOGevent type: 12

ただし、グローバルハンドラーでジェスチャイベントを取得しません..(他のタイプ、スクロール、クリックなどは機能しますが)。

NSLOG

これは 10.8 未満です。ジェスチャが 10.6 で報告されないことはわかっていますが、ドキュメントには、これが機能しないことは示されていません。何か案は?