Estoy tratando de crear un NSView personalizado con ambas esquinas redondeadas y una sombra paralela. I creado una subclase NSView y tienen el siguiente drawRect: métodoNSView personalizado con esquinas redondeadas y sombra paralela
- (void)drawRect:(NSRect)dirtyRect
{
NSRect rect = NSMakeRect([self bounds].origin.x + 3, [self bounds].origin.y + 3, [self bounds].size.width - 6, [self bounds].size.height - 6);
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:5.0 yRadius:5.0];
[path addClip];
NSShadow *shadow = [[[NSShadow alloc] init] autorelease];
[shadow setShadowColor:[NSColor redColor]];
[shadow setShadowBlurRadius:2.0f];
[shadow setShadowOffset:NSMakeSize(0.f, -1.f)];
[shadow set];
[[NSColor controlColor] set];
NSRectFill(rect);
[super drawRect:dirtyRect];
}
El resultado es un NSView dibujado con esquinas redondeadas, pero ninguna sombra (pero hacer ver matices de color rojo alrededor de las esquinas en el anti-aliasing) . Si hago un comentario en NSBezierPath, obtendré un NSView cuadrado con una sombra. No vi nada en los documentos que sugiriera que NSShadow y NSBezierPath son mutuamente excluyentes, así que obviamente me falta algo.
¡Todas las ideas son muy apreciadas!
Puse [ruta de relleno] en el lugar de NSFillRect() y el resultado fue el mismo –
Solo en caso de que alguien lea esto [ruta de relleno] trabajó para que dibujara una esquina redondeada rect dentro drawRect –