問題タブ [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.

0 投票する
3 に答える
2025 参照

objective-c - AppKit フレームワークを習得するための最良の方法

私は現在、Objective-C と Cocoa をしばらく学んでいますが、AppKit フレームワークについてもっと知る必要があると感じています。特定の用途にどのコンポーネントを使用すればよいか、よく疑問に思います。たとえば、2 つの NSView を単純に切り替える方法を研究するのに多くの時間を費やしました (NSTabView と同じ方法ですが、タブはなく、IBAction などで)。

Aaron Hillegass によるMac OS X 用の Cocoa プログラミング を読みましたが、AppKit フレームワークと Cocoa を使用したユーザー インターフェイスの開発に関する知識を広げるために、次に何を読むか、何をすべきかを探しています。何を見ておすすめしますか?

前もって感謝します。

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

cocoa - NSProgressIndicatorがレイヤーバックビューでアニメーション化されていません

NSProgressIndicatorレイヤーバックビューのサブビューにバースタイルがあります。その動作はやや複雑ですが、特定の時点で、バースタイルの不確定な進行状況インジケーターとして表示されます。問題は、この状態ではアニメーション化されない(つまり、理髪店の看板ポールを回転させる)ことです。レイヤーバッキングをオフにすると問題は修正されますが、他のアニメーションではウィンドウのスムーズさが低下するため、より良いものを期待しています。

完全な動作は次のとおりです。ダーティフラグに相当するものが設定されると、不確定なアニメーションの進行状況インジケーターとして表示されるはずです。次に、少し遅れて(ユーザーが入力を終了したことを確認するために)、さまざまな操作が実行されると、確定的な進行状況インジケーターに変換されていっぱいになります。そして最後に、プロセス全体の終わりに、それはもう一度自分自身を隠します。

これを実装するために、次のバインディングを設定しました。

  • Hiddenは、値トランスフォーマーを使用してモデルのloadingプロパティにバインドされます。NSNegateBoolean
  • Is Indeterminateは、私のモデルのwaitingForInputプロパティにバインドされています。
  • はモデルのプロパティにバインドされcurrentProgressます(trueの場合は0waitingForInputです)。
  • 最大値はモデルのプロパティにバインドされmaximumProgressます(trueの場合は0waitingForInputです)。

これはほとんど機能しますが、1つの例外を除いて、がの場合waitingForInputYESしたがって進行状況インジケーターが不確定である場合、進行状況インジケーターはアニメーション化されません。

進行状況インジケーターが更新されない通常の理由は、プログラマーが長時間実行操作で実行ループをブロックしていることですが、私はそれを行っていません。問題の期間中、実行ループは完全に開いており、起動を待機しているタイマー。私の知る限り、それは奇妙なモードでもありません。アプリは、この時間中に問題なくキーストロークやその他のイベントを受け入れます。(確定的な進行状況インジケーターがいっぱいになる後のフェーズは、非同期によって駆動されるNSURLConnectionため、どちらもブロックされません。)

この問題を解決するために、いくつかの手順を実行しました。

  • 進行状況インジケーターのAnimateバインディングを、IsIndeterminatewaitingForInputのようにモデルのプロパティに設定してみました。これにより、変更通知が発生したときにアニメーションがぎくしゃくして更新されます(入力遅延が再開するたびにKVO通知が送信されます)が、それよりもはるかにスムーズなアニメーションを望んでいます。waitingForInputwaitingForInput
  • KVOを使用して、loadingとの両方の変化を観察してみましwaitingForInputた。変更が観察されると、必要に応じて進行状況インジケーター-startAnimation:-stopAnimation:メソッドが呼び出されます。これらには明らかな影響はありません。
  • usesThreadedAnimation進行状況インジケーターをに設定してみましたNO。(Googleでのヒットは、これがレイヤーに裏打ちされた進行状況インジケーターの問題の更新に役立つ可能性があることを示唆しています。)これには明らかな影響はありません。私はまた、キックのためだけに試しYESましたが、それは同様に無駄であることがわかりました。

最後に、レイヤーバッキングをオフにしてみました。これにより、Animateバインディングと組み合わせた場合の問題が修正されます。ただし、他のアニメーションのパフォーマンスが許容できないほど低下するため、これは避けたいと思います。

それで、何かアイデアはありますか?この問題について助けていただければ幸いです。

0 投票する
7 に答える
5960 参照

macos - UISwitch、Mac に似たもの?

UISwitchiOSの をご存知の方も多いと思います。

UISwitchmacOS や AppKitのようなものを実装しようとしている既存のプロジェクトはありますか?

そうでない場合、どこから作成を開始しますか? 私はそれらを頻繁に目にし、非常に多くの用途を考えることができます.

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

cocoa - -[NSPasteboard types] がクラッシュする原因は何ですか?

お客様の 1 人に、貼り付け時に次のようなクラッシュが発生することがあります。

誰がこれを引き起こす可能性があるか考えていますか?

  • ペーストボード オブジェクトは、私が知る限り有効ですが、内部でクラッシュします。
  • これは通常、別のアプリから貼り付ける場合だと思いますが、他のアプリがペーストボードの所有権を誤って管理している可能性はありますか?

詳細については、 NSPasteboard は所有者オブジェクトを保持しますか? はい、ペーストボードは渡された所有者を保持します。したがって、このクラッシュは次のいずれかである必要があります。

  • 私のコードの過剰リリース。これにより、ペーストボードがまだオブジェクトへの参照を保持している間にオブジェクトの割り当てが解除されます。ペーストボードとは関係なく問題が発生すると予想されるため、これはありそうもないと思います。また、それを示唆するクラッシュ (レポート) は 1 つも見たことがありません。
  • NSPasteboardクロスアプリケーションの貼り付けを管理する方法で何かがうまくいかず、クラッシュします。誰かがそのようなことに遭遇したか、何が原因であるかを知っていますか?
0 投票する
2 に答える
263 参照

objective-c - AppKit とのリンクの問題

XCode3.2.1 を使用してクラスを作成しましたが、NSViewController (または他の AppKit エンティティ) から継承させたいと考えています。

Cocoa ライブラリにリンクしましたが、クラス ヘッダー ファイルが見つからないというエラーが表示されます

私のプロジェクトには、Cocoa クラスを問題なく継承する他のクラスがあります。Framework または CoreData の一部であるクラス (NSObject、NSArray、NSEntityDescription など) から継承するようにすれば、エラーは発生しません。

助言がありますか?

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

cocoa - NSTimer 効果なし...?

drawRect メソッドをトリガーするために、NSTimer セレクターで [self setNeedsDisplay:YES] を呼び出そうとしました。

最初に、NSTimer の初期化コードをボタン関数に入れました。

「setNeedsDisplay」は通常どおり呼び出されますが、drawRect 内のコードは呼び出されません。

次に、NSTimer の初期化コードを "- (id)initWithFrame:(NSRect)frame" に移動しようとしましたが、すべて正常に動作しました。(drawRect は 1 秒ごとに正しく呼び出されます)。

上記の2つの方法の違いは何ですか? ボタンでタイマーをトリガーしたい場合はどうすればよいですか?

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

objective-c - NSPasteboard は所有者オブジェクトを保持しますか?

NSPasteboard次のように呼び出すことができます。

つまり、ペーストボードは後で必要に応じてタイプのデータを提供するよう所有者に要求します。ただし、ドキュメントから見つけることができない (そして、明らかな出血を見逃している可能性があります) のは、owner保持されているかどうかです。

実際には、私が心配しているのは、所有者が弱い参照である場合、割り当てが解除され、ペーストボードがそこからデータを要求しようとするとクラッシュする可能性があることです。

注:アプリを依存させるよりも、バグを追跡するための支援としてこれに関心があることを明確にする必要があります。しかし、私はドキュメントも明確にしたいと思っています。

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

macos - ウィンドウ全体ではなく、ウィンドウの背景のアルファを変更する

簡単な質問があります。スライダーの値に応じてウィンドウのアルファ値を設定する以下の方法がありますが、ウィンドウのコンテンツも半透明になり、最終的にウィンドウとともに消えます。

ウィンドウ内のコンテンツ ビューではなく、ウィンドウのアルファ値を変更する方法はありますか?

ありがとう、サミ。

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

cocoa - ココアの ShowWindow/HideWindow

Carbon では、HideWindow(WindowRef) と ShowWindow(WindowRef) を使用してウィンドウの可視性を変更できます。

Cocoa では、NSWindow の orderOut: を呼び出して非表示にし、orderFront:、orderBack:、または orderWindow:relativeTo: を呼び出して画面に戻すことができることを知っていますが、それらのいずれも、他のウィンドウが最後に表示されたときの相対的なウィンドウの順序を尊重しません。

たとえば、上下に 2 つのウィンドウがあり、背面のウィンドウでorderOut: を呼び出す場合、 orderWindow:relativeTo: を呼び出さずに前面のウィンドウの背後にあるようにウィンドウを再度表示するにはどうすればよいですか。

今考えられる唯一のことは、そのすぐ上のウィンドウのウィンドウ ID を覚えておいて、それを再度表示するときに orderWindow:relativeTo: を使用することですが、上のウィンドウが表示される前に閉じられた場合にどうなるかは考えていません。リアウィンドウが再び見えるようになりました。

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

cocoa - Mac OS Xでデスクトップを描画するにはどうすればよいですか?

Mac OS X(Snow Leopard)でデスクトップを描きたい。具体的には、ランニングと同じ効果を達成したいと思います。

(コンピューターの近くにいない場合は、通常デスクトップの背景が表示されるスクリーンセーバーが表示されます。)

境界線なし(NSWindowをサブクラス化し、initWithContentRect:styleMask:backing:defer:ウィンドウスタイルをNSBorderlessWindowMaskに設定する)およびシャドウなし(setHasShadow:NO)のウィンドウを作成する方法を知っています。

setLevel:kCGDesktopWindowLevelまたはkCGDesktopIconWindowLevelを呼び出して、ウィンドウを他のウィンドウの下に配置できることはわかっています(質問418791を参照)。ただし、このレベルのウィンドウはまだデスクトップアイコンの上にあるため、これは私が望むものではありません。デスクトップの背景の上に、アイコンの下に配置したい。

私の見方は不透明です。デスクトップの背景を覆い隠すテクニックがあれば、それは問題ありません。