2

たとえば、OmniGraffleのようなブレーンストーミングアプリケーションの一種で、テキストビューを含み、ドラッグできる要素を使用してビューを作成しようとしています。(また、は矢印で接続可能である必要がありますが、それは(まだ)問題ではありません)

宿題をしたり、グーグルで検索したり、カカオに関する本を読んだりしましたが、似たような例はないようです。私もココアに慣れていないので、ここでは少し無力です。

私が確信していることは、要素を作成できるカスタムビューが必要だということです。これまで私が試したことは次のとおりです。

  • まず、要素を作成するためにウィンドウにサブウィンドウを追加するための構文を検索しました。サブウィンドウは、私が想像したように、自動的に移動可能になり、前面に表示されます。
    問題:あなたの経験豊富なCocoaプログラマーはおそらく驚かないので、私はそのようなものについて何も見つけられなかったことに驚いていました-これは何かのようです、それはCocoaで意図されていないだけですか?!

  • 次に、タイトルバーの描画(ユーザーがクリックして要素をドラッグできる)と。のカスタムビューを含むサブビューを作成することを考えましたNSTextView
    問題:

    • ウィンドウに数十のサブビューを作成するのは非常に遅いので(または、すべてのサブビューが常に同じクラスのインスタンスになるため、この場合はそれほど悪くないのでしょうか)、それほど賢くないことを読みました。
    • また、nibファイルまたはxibファイルからサブビューをロードする方法がわかりません。viewControllerが必要ですか?それとも、それは数十のインスタンスの問題をさらに悪化させるでしょうか?
    • そしてAppleは、サブビューをオーバーラップさせないように言っています(わかりました、それはそれほど重要ではありませんが、OmniGroupの人たちがOmniGraffleをどのように作ったのか本当に不思議です...)

  • そのため、周囲のカスタムビューでタイトルバーの描画を行い、プログラムでテキストビューを作成したいと思いました(私が理解しているように、テキスト「ビュー」は実際にはビューではなく、NSCellからその機能を取得してすべてを削減しますビューでの努力?)。
    問題:

    • それでも、ウィンドウ全体を埋めないテキストビューを作成できなかったために失敗しました(ウィンドウ全体が無視されているように見えますかinitWithFrame:[[NSScrollView alloc] initWithFrame: aRect] それとも間違っていますか?)。
    • また、最終的なアプリケーションの各要素にいくつかのボタンがあるはずです。各要素のnibファイルからのサブビューを使用すると、それを達成するのが簡単になると思いますか?

さて、何も機能せず、読むほど問題が発生するように見えるので、かなり混乱してイライラしています。
どうすればそのようなプログラムを実現できますか?誰かが私を正しい方向に押してくれませんか?

4

1 に答える 1

1

位置、サイズ、テキストをインスタンス変数に保存する、ドラッグ可能な要素のクラスを作成しました。私の見解では、すべての新しい要素インスタンスが配列に追加されます (今のところ、これはコントローラーなしで機能します)。配列は、 のループ内のすべての要素を描画するために使用されdrawRect:ます。要素のテキストについては、同じループ内のすべての要素から保存されたテキストに設定された NSTextFieldCell を使用します。

このようにして、要素を重ねることもできます。

于 2010-08-21T22:24:17.343 に答える