2

次のような行区切りをどのように描画しますか。

ここに画像の説明を入力

互いの上に 2 つの単一ピクセル ラインがあることに注意してください。任意のヒント?


編集:

NSBox サブクラスで必要なコードは次のとおりです (または NSView は実際には問題ではありません)。

- (void)drawRect:(NSRect)rect
{
    [[NSColor lightGrayColor] set];
    NSRectFill(NSMakeRect(0, 1, NSWidth(rect), 1));
    
    [[NSColor whiteColor] set];
    NSRectFill(NSMakeRect(0, 0, NSWidth(rect), 1));    
}
4

3 に答える 3

7

通常、この種のセパレータは で描画されNSBox、通常はNSBoxSeparatorタイプとして設定されます。ただし、それはあなたが探している外観ではありません。NSBoxサブクラスで手描きすることをお勧めします(通常のNSBox動作が得られるように)。サブクラスの例については、NSBoxMatt Gemmell のRoundedBoxを参照してください。

必要なのは 2 行だけなので、drawRect:非常にシンプルなはずです。このようにカプセル化すると、非常に柔軟になります。

(もちろんNSBox、カスタムの外観を作成するのではなく、標準のセパレーターを使用することも検討できます。それがその目的です。)

于 2013-02-25T16:18:48.840 に答える
0

私はiOSでこのようなものを模倣しましたが、同様のインターフェイスがあると仮定NSViewすると、これが役立つと思います。

UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(11, 99, 298, 1)];
lineView.backgroundColor = [UIColor darkGrayColor];
[panel addSubview:lineView];

UIView *lineView2 = [[UIView alloc] initWithFrame:CGRectMake(10, 100, 300, 1)];
lineView2.backgroundColor = [UIColor whiteColor];
[panel addSubview:lineView2];

NSViewインターフェースを自分で見てみると、ほぼ直接転送可能であるように見えます。

NSView *lineView = [[NSView alloc] initWithFrame:CGRectMake(11, 99, 298, 1)];
lineView.backgroundColor = [NSColor colorWithCalibratedRed:0.4f green:0.4f blue:0.4f alpha:1.0f];
[panel addSubview:lineView];

NSView *lineView2 = [[NSView alloc] initWithFrame:CGRectMake(10, 100, 300, 1)];
lineView2.backgroundColor = [NSColor colorWithCalibratedRed:1.0f green:1.0f blue:1.0f alpha:1.0f];
[panel addSubview:lineView2];
于 2013-02-25T15:48:46.307 に答える