Automator のワークフロー ビューを模倣するにはどうすればよいですか?
-
24-09-2019 - |
質問
Automator と同様に動作する (および見た目が) ようにしたいビューを含む、最初の本格的な Cocoa アプリケーションの開発を開始しています。 AMWorkflowView
.
実現したい基本的な機能:
- サブビューの配置
- 展開/折りたたみ状態でのサブビューの表示
- 複数選択
- ドラッグアンドドロップ
ココアに慣れるためにカスタムから始めました NSView
これは主にカスタム サブビューのコンテナとして機能し、その配置と複数の選択を処理します。サブビューは次のサブクラスでもあります。 NSView
, 、ボタン、ラベル、ポップアップ メニューなど、可変量のビュー自体が含まれるため、異なる高さを持つことができます。これは非常にうまく機能しましたが、先に進む前に、MVC パターンに従ってすべてがきちんと整理されていることを確認したいと思います。
Cocoaには、ビューコンテナの実装を容易にするクラスがすでにあるのではないかと思います。 NSCollectionView
.
(簡単な)方法はないようです 異なるサイズのビューを表示するには NSCollectionView
, 、 けれど。自分の習慣を続けるべきか NSView
(おそらく、 NSArrayController
選択と並べ替えのサポートのため)、あるいはもっと良い方法はありますか?
助けていただければ幸いです
解決
残念ながら答えは、あなたがあなた自身をロールバックする必要がありますです。 NSCollectionView
(これも拡張/潰れ状態を除外する)可変サイズのアイテムを可能にしない。
アイテムの限られた数のために、あなたはかなり簡単にこれを達成することができます(あなただけのレイアウトに尋ねられたときサブビューが適切に、そしてあなたが作成する必要が並べことをコンテナビューを必要としてください、あなたは物事の変更レイアウトを再)。多くのサブビューのために、しかし、あなたは、可能な限り効率的に世話をする必要があります。このことは、(例えば、のみリサイズしビュー「の後に」)できるだけレイアウトを開始し、キャッシュされた画像を、プロトタイプビューの視覚的な表現をキャッシュ描くよう錯体として取得することができます(速い!)すべてが、ビューのために編集中の、そして唯一のビューが編集されているため、「本物」のビューを配置する/使用します。
それは常に持っているように、ドラッグ&ドロップは、同じように動作しますが、かなりアニメーションNSCollectionView
のための上記のアカウントのどれもあなたを与えません。 :-)それは(レイアウト計算が迅速かつ簡単ですので)正確にがのため、すべてのサブビューが均一で速く、美しくアニメーションです。あなたが不規則なサイズを追加すると、問題はかなり多くなり複雑ます。
一番下の行は:あなたは可変サイズのビューが必要な場合は、NSCollectionView
は動作しません、あなたは独自のロールや他の人のコードを共有する人を見つける必要がありますが、性能と美しいアニメーションが容易ではないだろう。