4

丸みを帯びたビューの透明なNSWindowを作成しようとしています。

透明なウィンドウで丸みを帯びたビューを作成しようとしています。

これが今のように見えます:(隅にある小さな点を見てください)

ここに画像の説明を入力してください

境界線の半径を10pxに設定した別の例を次に示します(NSView drawRectで設定)。

ここに画像の説明を入力してください

私はこのAppleサンプルのコードを使用しています:https ://developer.apple.com/library/mac/#samplecode/RoundTransparentWindow/Introduction/Intro.html

具体的には、NSWindowサブクラスのこのメソッド:

- (id)initWithContentRect:(NSRect)contentRect
                styleMask:(NSUInteger)aStyle
                  backing:(NSBackingStoreType)bufferingType
                    defer:(BOOL)flag {
    // Using NSBorderlessWindowMask results in a window without a title bar.
    self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
    if (self != nil) {
        // Start with no transparency for all drawing into the window
        [self setAlphaValue:1.0];
        // Turn off opacity so that the parts of the window that are not drawn into are transparent.
        [self setOpaque:NO];
    [self setBackgroundColor:[NSColor clearColor]];

    }
    return self;
}

そしてこれは私のNSViewサブクラスにあります:

- (void)drawRect:(NSRect)dirtyRect
{
    [[NSColor redColor] set];
    NSBezierPath* thePath = [NSBezierPath bezierPath];
    [thePath appendBezierPathWithRoundedRect:dirtyRect xRadius:3 yRadius:3];
    [thePath fill];
}

誰かが私がここで欠けているものを教えてもらえますか?

ありがとう。

4

2 に答える 2

2

次のような、赤い輪郭(ストローク)があり、中央の領域が透明なものを探していますか?

ここに画像の説明を入力してください

もしそうなら、それを達成するために、私は次のコードを使用しました:

- (void)drawRect:(NSRect)frame {
    frame = NSInsetRect(self.frame, 3.0, 3.0);

    [NSBezierPath setDefaultLineWidth:6.0];

    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:frame
                                             xRadius:6.0 yRadius:6.0];
    [[NSColor redColor] set];
    [path stroke];
}

それがあなたが探しているものであるならば、あなたはおそらくそれを出発点として使うことができます。frame見ているように角を切り取る問題を回避するために、ストロークライン幅の半分の長方形を挿入することを確認する必要があります。

于 2013-02-21T18:02:20.113 に答える
2

これがあなたが探しているものであるかどうかはわかりませんが、MAAttachedWindowと呼ばれるMatt Gemmellによる素晴らしいクラスがあり、ここで見つけることができます:http: //mattgemmell.com/2007/10/03/maattachedwindow-nswindow-subclass/

少し古いですが、「フローティング」ポップアップウィンドウを実行し、透明度、境界線の半径を構成し、必要に応じてコンテキスト用の小さな矢印を追加する必要がある場合でも、うまく機能します。いつも使っています。

于 2013-02-21T17:52:32.927 に答える