問題タブ [appkit]
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 - AppKit フレームワークを習得するための最良の方法
私は現在、Objective-C と Cocoa をしばらく学んでいますが、AppKit フレームワークについてもっと知る必要があると感じています。特定の用途にどのコンポーネントを使用すればよいか、よく疑問に思います。たとえば、2 つの NSView を単純に切り替える方法を研究するのに多くの時間を費やしました (NSTabView と同じ方法ですが、タブはなく、IBAction などで)。
Aaron Hillegass によるMac OS X 用の Cocoa プログラミング を読みましたが、AppKit フレームワークと Cocoa を使用したユーザー インターフェイスの開発に関する知識を広げるために、次に何を読むか、何をすべきかを探しています。何を見ておすすめしますか?
前もって感謝します。
cocoa - NSProgressIndicatorがレイヤーバックビューでアニメーション化されていません
NSProgressIndicator
レイヤーバックビューのサブビューにバースタイルがあります。その動作はやや複雑ですが、特定の時点で、バースタイルの不確定な進行状況インジケーターとして表示されます。問題は、この状態ではアニメーション化されない(つまり、理髪店の看板ポールを回転させる)ことです。レイヤーバッキングをオフにすると問題は修正されますが、他のアニメーションではウィンドウのスムーズさが低下するため、より良いものを期待しています。
完全な動作は次のとおりです。ダーティフラグに相当するものが設定されると、不確定なアニメーションの進行状況インジケーターとして表示されるはずです。次に、少し遅れて(ユーザーが入力を終了したことを確認するために)、さまざまな操作が実行されると、確定的な進行状況インジケーターに変換されていっぱいになります。そして最後に、プロセス全体の終わりに、それはもう一度自分自身を隠します。
これを実装するために、次のバインディングを設定しました。
- Hiddenは、値トランスフォーマーを使用してモデルの
loading
プロパティにバインドされます。NSNegateBoolean
- Is Indeterminateは、私のモデルの
waitingForInput
プロパティにバインドされています。 - 値はモデルのプロパティにバインドされ
currentProgress
ます(trueの場合は0waitingForInput
です)。 - 最大値はモデルのプロパティにバインドされ
maximumProgress
ます(trueの場合は0waitingForInput
です)。
これはほとんど機能しますが、1つの例外を除いて、がの場合waitingForInput
、YES
したがって進行状況インジケーターが不確定である場合、進行状況インジケーターはアニメーション化されません。
進行状況インジケーターが更新されない通常の理由は、プログラマーが長時間実行操作で実行ループをブロックしていることですが、私はそれを行っていません。問題の期間中、実行ループは完全に開いており、起動を待機しているタイマー。私の知る限り、それは奇妙なモードでもありません。アプリは、この時間中に問題なくキーストロークやその他のイベントを受け入れます。(確定的な進行状況インジケーターがいっぱいになる後のフェーズは、非同期によって駆動されるNSURLConnection
ため、どちらもブロックされません。)
この問題を解決するために、いくつかの手順を実行しました。
- 進行状況インジケーターのAnimateバインディングを、IsIndeterminate
waitingForInput
のようにモデルのプロパティに設定してみました。これにより、変更通知が発生したときにアニメーションがぎくしゃくして更新されます(入力遅延が再開するたびにKVO通知が送信されます)が、それよりもはるかにスムーズなアニメーションを望んでいます。waitingForInput
waitingForInput
- KVOを使用して、
loading
との両方の変化を観察してみましwaitingForInput
た。変更が観察されると、必要に応じて進行状況インジケーター-startAnimation:
と-stopAnimation:
メソッドが呼び出されます。これらには明らかな影響はありません。 usesThreadedAnimation
進行状況インジケーターをに設定してみましたNO
。(Googleでのヒットは、これがレイヤーに裏打ちされた進行状況インジケーターの問題の更新に役立つ可能性があることを示唆しています。)これには明らかな影響はありません。私はまた、キックのためだけに試しYES
ましたが、それは同様に無駄であることがわかりました。
最後に、レイヤーバッキングをオフにしてみました。これにより、Animateバインディングと組み合わせた場合の問題が修正されます。ただし、他のアニメーションのパフォーマンスが許容できないほど低下するため、これは避けたいと思います。
それで、何かアイデアはありますか?この問題について助けていただければ幸いです。
macos - UISwitch、Mac に似たもの?
UISwitch
iOSの をご存知の方も多いと思います。
UISwitch
macOS や AppKitのようなものを実装しようとしている既存のプロジェクトはありますか?
そうでない場合、どこから作成を開始しますか? 私はそれらを頻繁に目にし、非常に多くの用途を考えることができます.
cocoa - -[NSPasteboard types] がクラッシュする原因は何ですか?
お客様の 1 人に、貼り付け時に次のようなクラッシュが発生することがあります。
誰がこれを引き起こす可能性があるか考えていますか?
- ペーストボード オブジェクトは、私が知る限り有効ですが、内部でクラッシュします。
- これは通常、別のアプリから貼り付ける場合だと思いますが、他のアプリがペーストボードの所有権を誤って管理している可能性はありますか?
詳細については、 NSPasteboard は所有者オブジェクトを保持しますか? はい、ペーストボードは渡された所有者を保持します。したがって、このクラッシュは次のいずれかである必要があります。
- 私のコードの過剰リリース。これにより、ペーストボードがまだオブジェクトへの参照を保持している間にオブジェクトの割り当てが解除されます。ペーストボードとは関係なく問題が発生すると予想されるため、これはありそうもないと思います。また、それを示唆するクラッシュ (レポート) は 1 つも見たことがありません。
NSPasteboard
クロスアプリケーションの貼り付けを管理する方法で何かがうまくいかず、クラッシュします。誰かがそのようなことに遭遇したか、何が原因であるかを知っていますか?
objective-c - AppKit とのリンクの問題
XCode3.2.1 を使用してクラスを作成しましたが、NSViewController (または他の AppKit エンティティ) から継承させたいと考えています。
Cocoa ライブラリにリンクしましたが、クラス ヘッダー ファイルが見つからないというエラーが表示されます
私のプロジェクトには、Cocoa クラスを問題なく継承する他のクラスがあります。Framework または CoreData の一部であるクラス (NSObject、NSArray、NSEntityDescription など) から継承するようにすれば、エラーは発生しません。
助言がありますか?
cocoa - NSTimer 効果なし...?
drawRect メソッドをトリガーするために、NSTimer セレクターで [self setNeedsDisplay:YES] を呼び出そうとしました。
最初に、NSTimer の初期化コードをボタン関数に入れました。
「setNeedsDisplay」は通常どおり呼び出されますが、drawRect 内のコードは呼び出されません。
次に、NSTimer の初期化コードを "- (id)initWithFrame:(NSRect)frame" に移動しようとしましたが、すべて正常に動作しました。(drawRect は 1 秒ごとに正しく呼び出されます)。
上記の2つの方法の違いは何ですか? ボタンでタイマーをトリガーしたい場合はどうすればよいですか?
objective-c - NSPasteboard は所有者オブジェクトを保持しますか?
NSPasteboard
次のように呼び出すことができます。
つまり、ペーストボードは後で必要に応じてタイプのデータを提供するよう所有者に要求します。ただし、ドキュメントから見つけることができない (そして、明らかな出血を見逃している可能性があります) のは、owner
保持されているかどうかです。
実際には、私が心配しているのは、所有者が弱い参照である場合、割り当てが解除され、ペーストボードがそこからデータを要求しようとするとクラッシュする可能性があることです。
注:アプリを依存させるよりも、バグを追跡するための支援としてこれに関心があることを明確にする必要があります。しかし、私はドキュメントも明確にしたいと思っています。
macos - ウィンドウ全体ではなく、ウィンドウの背景のアルファを変更する
簡単な質問があります。スライダーの値に応じてウィンドウのアルファ値を設定する以下の方法がありますが、ウィンドウのコンテンツも半透明になり、最終的にウィンドウとともに消えます。
ウィンドウ内のコンテンツ ビューではなく、ウィンドウのアルファ値を変更する方法はありますか?
ありがとう、サミ。
cocoa - ココアの ShowWindow/HideWindow
Carbon では、HideWindow(WindowRef) と ShowWindow(WindowRef) を使用してウィンドウの可視性を変更できます。
Cocoa では、NSWindow の orderOut: を呼び出して非表示にし、orderFront:、orderBack:、または orderWindow:relativeTo: を呼び出して画面に戻すことができることを知っていますが、それらのいずれも、他のウィンドウが最後に表示されたときの相対的なウィンドウの順序を尊重しません。
たとえば、上下に 2 つのウィンドウがあり、背面のウィンドウでorderOut: を呼び出す場合、 orderWindow:relativeTo: を呼び出さずに前面のウィンドウの背後にあるようにウィンドウを再度表示するにはどうすればよいですか。
今考えられる唯一のことは、そのすぐ上のウィンドウのウィンドウ ID を覚えておいて、それを再度表示するときに orderWindow:relativeTo: を使用することですが、上のウィンドウが表示される前に閉じられた場合にどうなるかは考えていません。リアウィンドウが再び見えるようになりました。
cocoa - Mac OS Xでデスクトップを描画するにはどうすればよいですか?
Mac OS X(Snow Leopard)でデスクトップを描きたい。具体的には、ランニングと同じ効果を達成したいと思います。
(コンピューターの近くにいない場合は、通常デスクトップの背景が表示されるスクリーンセーバーが表示されます。)
境界線なし(NSWindowをサブクラス化し、initWithContentRect:styleMask:backing:defer:ウィンドウスタイルをNSBorderlessWindowMaskに設定する)およびシャドウなし(setHasShadow:NO)のウィンドウを作成する方法を知っています。
setLevel:kCGDesktopWindowLevelまたはkCGDesktopIconWindowLevelを呼び出して、ウィンドウを他のウィンドウの下に配置できることはわかっています(質問418791を参照)。ただし、このレベルのウィンドウはまだデスクトップアイコンの上にあるため、これは私が望むものではありません。デスクトップの背景の上に、アイコンの下に配置したい。
私の見方は不透明です。デスクトップの背景を覆い隠すテクニックがあれば、それは問題ありません。