問題タブ [nsview]
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.
objective-c - NSWindow を薄暗くし、NSView を上に重ねる
NSWindow を薄暗くして (基本的に、クリックできない黒い透明なレイヤーをその上に置く)、その上にカスタム NSView を重ねる方法はありますか?
objective-c - NSViewサブクラスでのマウスクリックイベント
OpenGLコンテキストで初期化され、多数のマウスイベント処理(onMouseDownなど)を持つNSViewサブクラスがあります。ビューを含むメインCocoaウィンドウがあり、すべてのマウスイベントが正しく機能しているアプリを使用しています。
しかし、私は今、別のアプリでそれを使用しようとしています。そこでは、ポップアップしてビューで初期化されるセカンダリウィンドウがあり、マウスを動かしたevetsを取得している間、マウスクリック(またはその問題)イベントは何でも。
ビューをクリックしてドラッグすると、ウィンドウ全体が移動します。これは、マウスイベントが発生しない理由を推測する必要があります。私はacceptsFirstResponderとacceptsFirstMouseがYESを返し、hitTestが自分自身を適切に返すようにしています。
何が悪いのか、何か考えはありますか?
objective-c - ビュー コントローラーでファーストレスポンダーへのメッセージを処理する
単純なものが欠けているに違いありませんが、見えません。まず、セットアップ:
DATreeView
、のサブクラスNSView
DATreeViewController
、のサブクラスNSViewController
MainMenu.xib
DATreeViewController
からビューをロードするように構成された のインスタンスがありますDATreeView.xib
MainMenu.xib
のインスタンスもありDendreaAppDelegate
、アウトレットがあります (のインスタンスDATreeViewController
に配線されています) 。MainMenu.xib
DATreeViewController
Do Something!
doSomething:
、ファーストレスポンダにメッセージを送信するために接続されたメニュー項目です。- 偶然で
DATreeViewController
はなく、 というアクションがありdoSomething:
ます。
私が望むのは、Do Something!
メニュー項目が でdoSomething:
アクションをトリガーするDATreeViewController
ことです。ターゲット/アクション接続を直接設定することはできないふりをしましょう。ここで立ち止まって質問します。私の設計は完全に間違っていますか? 私がやろうとしていることは、私の神の目に愚か/悪/恥をかかせる可能性がありますか?
いいえ?偉大な。さて、私の人生では、メニュー項目をアクティブにすることはできません。違いがある場合は、Snow Leopardでこれを行っています。
NSView
との間の適切な統合を実現するためにNSViewController
、たとえばレスポンダー チェーンの管理など、 Matt Gallagher の例に従いましたが、実質的な変更が 1 つNSView
ありsetViewController:
ます。DATreeViewController
のloadView
メッセージ。私が知る限り、次のコードを実行した後applicationDidFinishLaunching:
レスポンダー チェーンは期待どおりに設定されます。つまり、次のようになります。
レスポンダ チェーンの一部でDATreeViewController
あり、 に応答しdoSomething:
、検証を実装していないため、Interface Builder を使用してDo Something!
メニュー項目を First Responder プロキシに接続するだけでよいと思っていました。をdoSomething:
アクションとして使用すると、メニュー項目が自動的にアクティブになります。
私は何を間違っていますか?かけがえのない支援をありがとうございました!
cocoa - NSScroller を大きくする
外部のタッチ センシティブ スクリーン用に最適化された Cocoa アプリケーションを作成しているので、NSScrollView に大きなスクロールバーを作成したいと考えています。スクローラーフレームのサイズを変更しようとしましたが、描画とマウスイベントの両方がスクロール領域でのみ発生し、幅が広くなりません(垂直スクローラーです)。これは私が使用しているコードです (サブクラス化された NSScrollView から):
NSScroller をサブクラス化しようとしましたが、それを拡張する方法がわかりません。
cocoa - なぜbitmapImageRepForCachingDisplayInRect:空の画像を作成するのですか?
ビューのビットマップをキャプチャすることになっている非常に単純なコードがあります。これは以前はLeopardで機能していましたが、SnowLeopardではひどく壊れているようです。
ウィンドウのボタンを押すと応答するコードは次のとおりです。
ボタンをクリックしてスナップショットを撮ると、完全に透明な画像になります。
私はここで完全に無知ですか、それともこのビットマップキャッシング方法は壊れていますか?
単純なプロジェクト(基本的には、このコードを呼び出すボタンを備えたスターターNSDocumentプロジェクト)は、ここにあります。
objective-c - NSCollectionViewItem のビューのサイズを変更します
NSCollectionViewItem のビューのサイズをプログラムで設定するにはどうすればよいですか?
私は NSCollectionView サブクラスでこれをやってみました:
ただし、このコードは効果がありません。NSCollectionViewItem に使用する NSView をサブクラス化し、setFrame: を initWithCoder メソッドに追加しようとしましたが、そうすると EXC BAD ACCESS クラッシュが発生します。
objective-c - NSWindow のコンテンツをグレー表示する
NSWindow
with 2 NSViews
(NSSplitView
とカスタムNSView
)があります。これらのビューに入力するデータにアクセスするには、時間がかかる場合があります。この期間中、これらのビューのコンテンツをグレーアウトしたいと思います。
私の最初のアプローチは、他の 2 つを覆う黒い 3 分NSView
の 1 を作成し、アルファ値を変更することでグレーアウト効果を実現することでした。ただし、兄弟ビューを持つ階層を持つことは定義されていないことを学びました。
ここで最善のアプローチは何ですか?
- 2 つのビューをキャッシュ
NSBitmapImageRep
し、キャッシュされた画像を背景として使用して 3 番目のビューに置き換えます。 - 各ビューのアルファ値を個別に設定します(グレー効果のために黒い背景を取得する方法はまだよくわかりません)
- 考慮していないこと
cocoa - Mac 上の Cocoa でシングル クリックとダブル クリックを区別する
私には習慣がありますNSView
(それは多くの習慣の1つであり、それらはすべて内部に住んでNSCollectionView
います—それは関係ないと思いますが、誰にもわかりません)。ビューをクリックすると、選択状態が変更されます (それに応じて再描画されます)。ビューをダブルクリックすると、ダブルクリックしたオブジェクトの大きなプレビュー ウィンドウがポップアップ表示されるようにします。
私の最初は次のように見えました:
これはほとんどうまくいきました。ただし、ビューをダブルクリックすると、選択状態が変わり、ウィンドウがポップアップします。これはまさに私が望むものではありません。
2つのオプションがあるようです。NSTimer
ダブルクリックに応答するときに選択状態を元に戻す (誤ったシングルクリックを元に戻す) か、シングル クリックに応答する前に遅延を組み込む何らかの解決策を練ることができます。つまり、選択状態を変更する前に、2 回目のクリックが行われないことを確認できます。
これはよりエレガントに思えたので、私が最初に取ったアプローチでした。私が Google から見つけた唯一の実際のガイダンスは、名前にハイフンが含まれる名前のないサイトに関するものでした。このアプローチは、ほとんどの場合、1 つの大きな注意点があります。
未解決の質問は、「どのくらいNSTimer
待つ必要がありますか?」です。名前のないサイトでは、Carbon 関数の使用が提案されていますGetDblTime()
。64 ビット アプリでは使用できないことを除けば、私が見つけた唯一のドキュメントには、クロック ティックを返すと書かれています。そして、それらを秒に変換する方法がわかりませんNSTimer
。
では、ここでの「正しい」答えは何ですか? GetDblTime()
?をいじります。ダブルクリックで選択を「元に戻す」? ココアの慣用的なアプローチがわかりません。
nsview - カスタム ビューを使用したカスタム NSStatusItem - NSWindow、NSView、カスタム NSMenuItem を使用しますか?
Spotlight、CoverSutra、およびそのタイプの他のアプリのように動作する LSUIElement アプリを作成しようとしています。NSWindow をポップアップするカスタム NSStatusItem を作成できましたが、問題は、現在フォーカスがあるアプリがカスタム NSWindow にフォーカスすることです。
私は Matt Gemmell の例 ( http://mattgemmell.com/2008/03/04/using-maattachedwindow-with-an-nsstatusitem )に基づいています。
たとえば、Safari で Spotlight アイコンをクリックすると、現在の Safari ウィンドウはグレー表示されず、フォーカスされたままになります。Spotlight で ESC を押すと、フォーカスが Safari ウィンドウに戻ります。
カスタム NSWindow でこれを行うことができませんでした。ウィンドウにフォーカスを戻すには、ウィンドウをクリックして戻す必要があります。
だから私はこれを達成するためにどのルートに行くべきか知りたいです。ソリューションは、カスタム NSMenuItem を持つ NSWindow、NSPanel、NSMenu ですか?
objective-c - NSScrollView 内で NSView を中央に配置する
「プレビュー」のように、NSScrollView 内で NSView を中央に配置するにはどうすればよいですか?