0

形を描きたかったのですが、その上に小さな透明な形を描きたかったのです。

-(void) drawRect:(NSRect)dirtyRect
{
    //clear everything
    {
        [[NSColor whiteColor] set];
        [[NSBezierPath bezierPathWithRect:dirtyRect] fill];
    }


    NSBezierPath    *thePath = [NSBezierPath bezierPathWithOvalInRect: self.bounds];
    [thePath setLineWidth: 30];
    [[NSColor blueColor] set];
    [thePath stroke];

    [[NSGraphicsContext currentContext] setCompositingOperation: NSCompositeCopy];
    [[NSColor clearColor] set];
    [thePath setLineWidth: 4];
    [thePath stroke];
}

上記のプログラムの結果として、青い楕円と、青い楕円の中心にある黒い楕円を取得しています。

私も NSImage forst を使って試してみましたが、それでも同じ結果が得られました。

-(void) drawRect:(NSRect)dirtyRect
{
    //clear everything
    {
        [[NSColor whiteColor] set];
        [[NSBezierPath bezierPathWithRect:dirtyRect] fill];
    }


    NSImage* image = [[NSImage alloc] initWithSize:self.frame.size];

    [image lockFocus];

    //clear everything
    {
        [[NSColor whiteColor] set];
        [[NSBezierPath bezierPathWithRect:dirtyRect] fill];
    }

    NSBezierPath    *thePath = [NSBezierPath bezierPathWithOvalInRect: self.bounds];
    [thePath setLineWidth: 30];
    [[NSColor blueColor] set];
    [thePath stroke];

    [[NSGraphicsContext currentContext] setCompositingOperation: NSCompositeCopy];
    [[NSColor clearColor] set];
    [thePath setLineWidth: 4];
    [thePath stroke];

    [image unlockFocus];

    [image drawInRect:self.frame fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0];
}
4

1 に答える 1

2

ウィンドウはデフォルトで不透明であるため、楕円は黒く表示されます。ウィンドウで楕円形のトラックをうまく切り取ることができましたが、ウィンドウが不透明であるため、モニターで同じ楕円形を切り取るための産業用レーザーがないため、Mac は代わりにそこに何らかの色を表示する必要があります。それが示す色はclearColor:黒の色です。

解決策は、ウィンドウを に設定するopaqueことNOです。

デフォルトはYESで、これは素晴らしく効率的ですが (実際には のため)、他のウィンドウのコンテンツが透けて見えるのを防ぎます。に設定するとNO、薄い楕円形のトラックを通して窓の後ろにあるものを見ることができます。(楕円形を塗りつぶして、… えっと… ウィンドウに大きなウィンドウを表示すると、よりうまく機能します。)

ウィンドウの不透明度をオフにすると、このようになります。

(トラックが灰色で塗りつぶされているように見えるのはなぜですか?それは、そこに表示されているウィンドウの影です。実際に試してみると、トラックを移動すると、システム上の他のウィンドウがトラックを通して見えるようになります。窓まわり。)

于 2013-02-18T05:36:00.440 に答える