Я хотел нарисовать фигуру, над ней я хотел нарисовать меньшую прозрачную форму.Настройка режима композитного рисования, вызывающего черные дыры/патчи на NSWindow
-(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 Форст, а затем на виду, но по-прежнему получать тот же результат.
-(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];
}
Спасибо за превосходное объяснение. Просто хотел знать, есть ли способ рисовать прозрачную форму по сплошной форме, и результат не должен отображать тени окна или черные дыры. – Omkar
@Omkar: «прозрачный» и «не следует отображать тени окна» не согласуются, поскольку прозрачность позволяет вам увидеть, что находится за окном, а тень за окном. Вы можете отключить тень окна, но тогда он также не будет виден вокруг окна. –