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:黑色。

解决方案是将窗口设置opaqueNO.

默认值为YES,这很好且高效,但(实际上,因为)它会阻止其他窗口的内容显示出来。将其设置为NO可以让您通过那条细长的椭圆形轨道看到窗户后面的东西。(如果你填充椭圆会更好,在……呃……窗口中给自己一个更大的窗口。)

这是关闭窗口不透明的外观。

(为什么看起来轨道充满了灰色?那是您在那里看到的窗口阴影。当您真正尝试它时,您将能够通过轨道看到系统上的其他窗口,因为您移动窗户周围。)

于 2013-02-18T05:36:00.440 回答