最近では、カスタム コントロール用にあらゆる種類の凝った描画を行う OS X アプリがますます増えているようです。ほんの数例を挙げると、Twitterific、Things、EventBox、Versions などのアプリ....
基本的に、この種のことを始める方法についての情報を探しています。コントロールをサブクラス化し、カスタム描画を使用するだけで行われるのか、それともまったく異なるものなのかはわかりません。
どんな助けでも大歓迎です。ありがとう!
最近では、カスタム コントロール用にあらゆる種類の凝った描画を行う OS X アプリがますます増えているようです。ほんの数例を挙げると、Twitterific、Things、EventBox、Versions などのアプリ....
基本的に、この種のことを始める方法についての情報を探しています。コントロールをサブクラス化し、カスタム描画を使用するだけで行われるのか、それともまったく異なるものなのかはわかりません。
どんな助けでも大歓迎です。ありがとう!
それはあなたが何をしたいかによって完全に異なります。
たとえば、Versions の [Show Raw Properties] ボタンは NSButton サブクラスです。これは、基本的に、独自の外観を持つ標準的なボタンの動作が必要だからです。ボタンをサブクラス化する 1 つの方法は、独自の -drawRect:(NSRect)rect メソッドを NSButton サブクラスに単純に実装することですが、NSButton が Cocoa で実装される方法に固執することにしました。つまり、ほとんどの描画はボタンのセルによって行われます。実装は次のようになります。
NSButton サブクラスでは:
+ (Class) cellClass
{
return [OurButtonCell class];
}
- (void)drawRect:(NSRect)rect
{
// first get the cell to draw inside our bounds
// then draw a focus ring if that's appropriate
}
NSButtonCell サブクラス (OurButtonCell) では:
- (void)drawInteriorWithFrame: (NSRect) rect inView: (NSView *) controlView
{
// a bunch of drawing code
}
バージョンのタイムライン ビューは、実際には WebView です。そこに表示されるページは、JavaScript を使用して、クリックしたヘッダーを折りたたみます。
カスタム コントロールをどこから開始するかについて、私が使用する経験則は次のとおりです。
独自のカスタム ビューの描画メソッドで描画する方法を学習するための推奨読書: Cocoa Drawing Guide
たとえば、NSTableView の外観をカスタマイズすることは、テーブルビューの複雑さのおかげで、まったく別のお茶であり、あらゆる場所で発生する可能性があります。テーブルでやりたいことのために独自のカスタムセルを実装しますが、実際の NSTableView オブジェクト自体のサブクラスで行が強調表示される方法を変更する必要があります。たとえば、 Matt Gemmell のサイトにあるiTableView のソース コードを参照して、どこに何を描画するかの明確な例を確認してください。
最後に、BWToolkit のコードをチェックアウトするという Abizer の提案は素晴らしいアイデアだと思います。最初は少し圧倒されるかもしれませんが、そのコードを読んで理解できれば、独自のカスタム ビューとコントロールを問題なく実装できるでしょう。
いくつかの優れたコード例を見てください: BWToolkit