2011-08-27 9 views
5

私はココアを使い慣れていないので、経験豊富なココアのアプリケーションのアドバイスを探しています。ココア製図アプリケーションのアドバイス

オブジェクトをキャンバスに描画/ドラッグする基本的なOmniGraffleスタイルのアプリケーションを構築しています。キャンバスにオブジェクトを配置した後、オブジェクトのプロパティ(色、線の色や幅など)の変更、サイズ変更、新しい位置への移動などを選択できます。

ウォームアップするには、カスタムNSViewにマウスで描画したオブジェクト(円、長方形など)を作成し、オブジェクトをNSArrayコレクションに追加し、コレクションの内容をビューにレンダリングする基本的な描画アプリケーションを作成しました。私はこのまま続けることができますが、私は、オブジェクトの選択の検出、Z-インデックスの解決、フォーカスのハイライト、ハンドルのドラッグなど、関連するすべてのレンダリングを追加する必要があります。また、各サイクルですべてのオブジェクトをレンダリングするのはひどく無駄です。

軽量なビューオブジェクトをキャンバスにドロップして、マウスイベントを検出して自分自身とフォーカスリングなどを描画できるようにするのが良い方法のようです。しかし、NSViewはこれらのプロパティを持つオブジェクトのように見えますが、多くの手荷物を持つヘビーウェイトコンポーネントであることについては、ウェブ上で多くのチャットが行われています。私はNSCellを見つけて読んだことがあるが、正しい選択肢であるかどうかは分からない。

提案がありますか?あなたが正しい方向に私を振ることができるなら、私はそれを大いに感謝します。

+0

私は間違いなく 'NSCell'の使用を勧めます。 「NSTableView」でさえ、最新の反復でそれから離れています。 「NSCell」は面白くない。 –

+1

Sketchの例をご覧になることを強くお勧めしたいと思います。私がまだSketch + Accessibilityを使っていない場合は、そのSketch + Accessibilityと言います。そこには良い考えがたくさんあります。 –

答えて

3

最初の最適化のルール:最初に実行しないでください。

シェイプごとのカスタムNSViewは、私にとってはうってつけです。異なる形の異なるサブクラスが必要かどうかはあなた次第です。私はベジェパスとして自分自身を記述することができる単一の一般的なシェイプビュークラスとシェイプから始めますが、それを保持することについてはあまり厳しくしないでください。しかし、それを実装するだけであなたには意味があります。

それから、一度それを働かせたら、それをプロファイルしてください。できるだけ多くの図形を作ってください。それからもっと作る。高ポリカウントの形状。交差点。塗りつぶし、線、シャドウ、グラデーション。おそらく、ストレッサーごとに別々の文書を作成するべきです。遅いのはユーザーレベルだけに注目してください。次に、Instrumentsの下でアプリを実行して、なぜそれが遅いかを調べます。

ビューが間違った解決策になることがあります。 CALayersを調べることを忘れないでください。しかし、あなたがそれを試してそれを測定するまでは、何かをゆっくりと支配しないでください。

+0

まあ、すべてが典型的なユースケースに依存します。アプリが何千ものオブジェクトを処理すると予想される場合、私は何千ものNSViewインスタンスを使用せず、別のデザインを前もって選択することを恥ずかしく思っています。 – Jay

関連する問題