問題タブ [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.
cocoa - Cocoaで非常に大きなスクロールビューを実装する方法
約15000ピクセルのサイズのビューをCocoaで作成するのが賢明ですか?(もちろん、このビューのごく一部のみが一度に表示されますNSScrollView
)
InterfaceBuilderのサイズには10000ピクセルの制限があります。これは人為的な制限ですか、それともその背後にある正当な理由がありますか?
巨大なビューを作成してNSScrollView
/Quartzに効率的にレンダリングすることを心配させる必要がありますか(私のビューはで要求された領域内にプログラムで描画されますdrawRect
)、または過度のメモリ使用量やその他の問題のリスクがありますか?(たとえば、OS Xはいつでもビュー全体のビットマップをビデオメモリにキャッシュしようとすることができますか?)
cocoa - 回転した NSView サブクラスでカーソル四角形を使用してはいけないのはなぜですか?
カスタム NSView サブクラスを作成しています。ウィンドウにこのクラスのインスタンスがいくつかありますが、そのほとんどは NSView の setFrameRotation メソッドを呼び出すことによって回転されます。また、このビューの長方形の領域にカーソルを合わせる必要があります。
NSView の addCursorRect メソッドのドキュメントには、次の斜めの警告が含まれています。
カーソルの四角形は、スーパービューによるクリッピングの対象ではなく、回転したビューでの使用も想定されていません。
まあ、クソ。しかし、そうでなければ使用しなければならないハックよりもはるかに優れたソリューションであるため、それらを使用したいと思います. そして、あなたは何を知っていますか?試してみましたが、うまくいくようです。それにもかかわらず、その警告は私を怖がらせます。いつか悪魔が彼の借金を取りに来るのではないかと心配している. したがって、私の質問は次のとおりです。カーソルの長方形が回転ビューでの使用を意図していない理由を誰か知っていますか?
cocoa - NSColorWellサブクラスがmouseMovedイベントを取得しない
Cocoaアプリにカラーピッカーを実装しようとしています。(はい、NSColorPanelについては知っています。あまり好きではありません。自分でロールすることのポイントは、もっとうまくやれると思うことです。)
これが私のピッカーの現在の状態の写真です。
(ソース:ryanballantyne.name)
カラーホイールを囲むウェルはNSColorWellサブクラスです。これらはプログラムでインスタンス化され、カラーホイールクラスでaddSubViewを呼び出すことにより、カラーホイールビュー(NSViewサブクラス)に追加されます。
グラブハンドルでカラーウェルをドラッグできるようにしたいと思います。その旅の始まりは、マウスをハンドルの上に置くと、カーソルが開いた手に変わることです。残念ながら、ほとんどのビューが回転しているため、これにカーソル長方形を使用することはできません。したがって、mouseMovedイベントを使用して、自分でヒット検出を行う必要があります。
これが私が機能させようとしているマウスイベントコードです:
mouseMovedメソッドが呼び出されないことがわかりました。出入りの同上。ただし、mouseDownを実装すると、そのイベントが呼び出されるため、必要なイベントだけでなく、少なくともいくつかのイベントが私に届きます。
何か案は?ありがとう!
cocoa - NSSplitView を折りたたんだ後、ビューの高さを修正するにはどうすればよいですか?
ボトムビューに NSScrollView を持つ NSSplitView があります。問題は、下部ビューを折りたたんでから再度開く (折りたたみを解除する) と、スクロール ビューの高さがその下部ビューの高さを超えているため、スクロール ビューの上部が切り取られていることです。IB でスクロール ビューと分割ビューを全方向に自動サイズ変更するように設定しました。折りたたみを解除した後にそのスクロール ビューの高さを調整する必要がありますか、それともサイズ変更プロパティを間違って設定していますか? 以下は、クリッピングがどのように見えるかの前後の画像です。
崩壊前:
折りたたんで再度開いた後 (下部のビューのスクロール バーが切り取られていることに注意してください)
objective-c - NSView での画像の描画
現時点では、画像を読み込んで描画し、理論的にはズームと回転を可能にする単純な Obj C プログラムがあります。私は NSAffineTranslations を使用しています。
画像を左上にロックしたいので (左下の PS/PDF 標準ではなく)、isFlipped を使用して [afTrans scaleXBy:1.0 yBy:-1.0]; を呼び出しています。
問題は、何らかの理由で、最初に drawRect が呼び出された後、変換が行われないことです。
画像を読み込むと、画像が表示され、正しく表示されます。ウィンドウのサイズを変更すると (drawRect を呼び出します)、画像は描画されますが、上下逆になります。これは、変換が有効にならなかったことを意味します。2回目以降のデータに違いは見られません。
これは、コードの簡素化されたバージョンです。
ETA: 関連するかもしれないいくつかのコードを次に示します。
cocoa - NSView をすべての NSView の前面に移動するにはどうすればよいですか
NSView ウィンドウを前面に移動するにはどうすればよいですか。私のアプリには 3 つのウィンドウがあり、そのうちの 1 つのボタンを押すと、別のウィンドウがその上に移動します。
cocoa - NSView は、最初の NSView が 2 番目の NSView にまたがって移動されると、アーティファクトを別の NSView に残します
スーパービューでドラッグできる NSView サブクラスがあります。mouseDragged イベント ハンドラーで NSView の setFrameOrigin メソッドと setFrameRotation メソッドを呼び出して、ビューを移動します。ビューは、呼び出しごとに移動および回転されます。
単一のスーパービューに含まれるこれらのビューの複数のインスタンスがあります。私が抱えている問題は、あるビューが別のビューにドラッグされると、見えなくなっているビューにアーティファクトが残ることです。この動作の短いビデオを録画しました。残念ながら、ビデオ圧縮のため、アーティファクトはあまり見えません。
これは同時平行移動と回転が関係しているのではないかと強く疑っています。Quartz Debug は、別のビューがドラッグされると、閉塞 (または閉塞) ビューの長方形が更新されることを明らかにします (ビデオはこちら)。どういうわけか、この四角形は描画エンジンによって誤って計算されているため、再描画する必要があるビューの一部はそうではありません。
キッカーは、これを修正する方法がわかりません。ドキュメントで update rect を手動で指定する方法が見つかりません。また、それが必要かどうかもわかりません。何か案は?ありがとう!
cocoa - CALayer でサポートされている NSView サブクラスをローテーションする方法
Core Animation でアニメーション化したいカスタム NSView サブクラスがあります。私はすでに (CA なしで) NSView の setFrameOrigin および setFrameRotation メソッドを使用して、これらのビューの位置と回転を設定しています。ただし、何をしても、ビューにレイヤーバッキングを追加すると、ビューを回転させることができません。
NSView の setFrameRotation および setFrameCenterRotation メソッドを使用してみました。後者はビューを少し移動しますが、コンテンツは回転しません。前者は効果がありません。CATransform3DRotate によって作成された CATransform3D をビューのレイヤーに適用しても効果はありません。
簡単なことのように思えるので、この質問をするのは少しばかげていますが、私の人生では、それを機能させる方法がわかりません。だれか、こんなに簡単だったなんて、額を叩かせてください。:)
cocoa - NSMatrix と特定のセルのみを自動サイズ変更しますか?
フレームのサイズが変更されたときに、左の列のサイズを変更したくありません。NSMatrix をサブクラス化せずにこれを行う方法はありますか?
2 つの NSMatrix を作成し、それらを並べて配置する必要があるのではないかと考えています。1 つは自動サイズ変更を YES に設定し、もう 1 つは NO に設定します。これはそれを行うための最も適切な方法ですか?
助けてくれてありがとう。
PS このサイトは非常に役に立ちました。貢献してくれてありがとう。
objective-c - 追加されたサブビューで drawRect が呼び出されない
contentView
カスタム コントロールと 1 つのカスタムコントロールを含むウィンドウをプログラムで作成しようとしていますが、NSTextField
このウィンドウとビューの階層を自分自身で描画するのに問題があります。
カスタムのボーダレス ウィンドウを作成し、そのsetContentView
/contentView
アクセサーをオーバーライドします。これは正常に機能しているようで、カスタムの contentViewinitWithFrame
とdrawRect
メソッドが呼び出され、contentView が正しく描画されます。
NSTextField
しかし、プログラムでカスタムを追加しようとするとすぐに、contentView
追加または描画されません。カスタムとは、指定されたイニシャライザ ( initWithFrame:frame
- カスタム フォント設定のみ) と次のような drawRect メソッドをオーバーライドすることを意味します。
カスタム contentView の初期化子は次のようになります。
私はこれに数時間苦労してきたので、どんな指針も大歓迎です。リクエストに応じて、より多くのコードを入手できます。)