6

サブクラス NSImageView があり、角が丸い境界線を描きたいです。それは機能しますが、画像のコーナーも切り取る必要があります。

私のスクリーンショットを見てください:

ここに画像の説明を入力

ボーダー/コーナーを描画するためにこのコードを作成しました。

- (void)drawRect:(NSRect)dirtyRect
{
    [super drawRect:dirtyRect];

    NSColor *strokeColor;
    if(self.isSelected)
        strokeColor = [NSColor colorFromHexRGB:@"f9eca2"];
    else
        strokeColor = [NSColor colorFromHexRGB:@"000000"];

    [strokeColor set];    
    [[NSBezierPath bezierPathWithRoundedRect:NSInsetRect(dirtyRect, 1, 1) xRadius:5 yRadius:5] stroke];
}

画像クリップを作成するにはどうすればよいですか?

編集:

まあ私はそれを修正しましたが、それは醜い方法だと感じています。もっと賢いものはありますか?

新しいコード:

- (void)drawRect:(NSRect)dirtyRect
{
    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:NSInsetRect(dirtyRect, 2, 2) xRadius:5 yRadius:5];

    [path setLineWidth:4.0];
    [path addClip];

    [self.image drawAtPoint: NSZeroPoint
                 fromRect:dirtyRect
                 operation:NSCompositeSourceOver
                 fraction: 1.0];

    [super drawRect:dirtyRect];

    NSColor *strokeColor;
    if(self.isSelected)
    {
        strokeColor = [NSColor colorFromHexRGB:@"f9eca2"];
    }
    else
        strokeColor = [NSColor colorFromHexRGB:@"000000"];

    [strokeColor set];    
    [NSBezierPath setDefaultLineWidth:4.0];
    [[NSBezierPath bezierPathWithRoundedRect:NSInsetRect(dirtyRect, 2, 2) xRadius:5 yRadius:5] stroke];
}
4

2 に答える 2

4

sレイヤーのコーナー半径NSImageViewも5pxに設定し、そのmaskToBoundsプロパティをに設定しますYES

于 2012-03-04T12:22:51.167 に答える