2012-01-31 5 views
4

。しかし、私はそれを再現するために、ボタンタイプ、ベゼルスタイル、グラデーションタイプの組み合わせを見つけることはできません。私の地元の目標は、作成プラスあなたもマイナスの右側の一部を実装する方法を知ることができるがある可能性があります。NSButtonのグラデーションスタイル

Add and remove items, gradient button

のようにボタンを(追加)とマイナス(削除)することがありますか?無効なグラデーションボタンのようです。

更新(2012-02-01、午後02時52分)

私は、空のXIBにテキストエディタで開いているXIBをグラデーションボタンを入れて、私のボタンを見つけます。これはコードの一部です。

<array class="NSMutableArray" key="NSSubviews"> 
    <object class="NSButton" id="155381693"> 
    <reference key="NSNextResponder" ref="1005"/> 
    <int key="NSvFlags">268</int> 
    <string key="NSFrame">{{20, 303}, {106, 23}}</string> 
    <reference key="NSSuperview" ref="1005"/> 
    <reference key="NSWindow"/> 
    <string key="NSReuseIdentifierKey">_NS:2466</string> 
    <bool key="NSEnabled">YES</bool> 
    <object class="NSButtonCell" key="NSCell" id="976550657"> 
     <int key="NSCellFlags">-2080244224</int> 
     <int key="NSCellFlags2">134217728</int> 
     <string key="NSContents">Gradient Button</string> 
     <object class="NSFont" key="NSSupport"> 
     <string key="NSName">LucidaGrande</string> 
     <double key="NSSize">13</double> 
     <int key="NSfFlags">1044</int> 
     </object> 
     <string key="NSCellIdentifier">_NS:2466</string> 
     <reference key="NSControlView" ref="155381693"/> 
     <int key="NSButtonFlags">-2033434369</int> 
     <int key="NSButtonFlags2">162</int> 
     <string key="NSAlternateContents"/> 
     <string key="NSKeyEquivalent"/> 
     <int key="NSPeriodicDelay">400</int> 
     <int key="NSPeriodicInterval">75</int> 
    </object> 
    </object> 
</array> 

この情報を使用してボタンを再現しようとします。

答えて

8

OMG、私は盲目でした。ベゼルスタイルをNSSmallSquareBezelStyleに設定し、ボタン をNSMomentaryPushInButtonに設定します。

私はイメージは必要ありません。私はCoreGraphicsでカスタムドローをする必要はありません(私は自分のクラスをそれにしました)。私はxibを解析する必要はありません。私はランタイム構造をダンプする必要はありません(xibで作成されたグラデーションボタンへのアウトレットのフィールドの値を見つけるために行いました)。私はdocumentationからベゼルスタイルのすべての値を試しなければならなかった。しかし、ドキュメンテーションでNSSmallSquareBezelStyleの説明を読んだら、私の混乱を理解しています。IBウィザードの「グラデーション」値とはかなり離れています。

enter image description here

正しいコード:

NSButton *gradientButton = [[NSButton alloc] initWithFrame:NSMakeRect(40, 40, 80, 32)]; 
[gradientButton setButtonType:NSMomentaryPushInButton]; 
[gradientButton setBezelStyle:NSSmallSquareBezelStyle]; 
[gradientButton setTitle:@"Title"]; 
[self.window.contentView addSubview:gradientButton]; 

結果:

enter image description here

0

あなたが参照しているボタンは、カスタムボタンとおそらくカスタム背景画像ですが、確かにプログラムで作成することができます。これらのタイプのボタンの問題点は、ボタンのいくつかの変種が非常によく似ているが若干の違いがあることです。

これらのボタンを作成する最も簡単な方法は、グラデーションボタンを使用して、+と - の画像をXcodeのストックアイコンからそれらにドラッグすることです。さもなければあなたはあなたが望むように見えるカスタムNSButtonを見回したくなるでしょう。私は、これらを持っているオープンソースのプログラムがいくつかあると信じていますが、私は頭の上から覚えていません。

+0

、コリン、ありがとうございました。時には画像が最良の解決策です。しかし、なぜ私はIBからグラデーションボタンを作成でき、コードからはできないのか理解したいと思います。 – alexchernyy

+0

あなたはできるはずですが、正確に一致するカスタムボタンを作成する場合は、手動で描画するかボタンの外観に合ったイメージを使用してプログラマチックに再作成することになります一致しようとしています。 –

+0

OK、上記のxibコードからグラデーションボタンを再現できません。私はコリンが正しいと思っています - イメージは最も単純な方法です。 – alexchernyy

関連する問題