Aquí hay un proyecto de ejemplo que muestra cómo hacerlo:
http://github.com/NSGod/BlackBorderlessWindow
Básicamente, es necesario crear una subclase sin fronteras NSWindow
. La forma más fácil de hacerlo es establecer el tamaño de la ventana y la disposición en el archivo de punta, y luego establecer su clase para que sea su subclase personalizada. Entonces, aunque todavía se verá como una ventana normal en Interface Builder, en tiempo de ejecución aparecerá como lo necesite.
@implementation MDBorderlessWindow
- (id)initWithContentRect:(NSRect)contentRect
styleMask:(NSUInteger)windowStyle
backing:(NSBackingStoreType)bufferingType
defer:(BOOL)deferCreation {
if (self = [super initWithContentRect:contentRect
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered defer:deferCreation]) {
[self setAlphaValue:0.75];
[self setOpaque:NO];
[self setExcludedFromWindowsMenu:NO];
}
return self;
}
El valor alfa hará que la ventana sea semitransparente.
Además, puede crear una costumbre NSView
subclase que dibujará un rectángulo redondeado:
@implementation MDBlackTransparentView
- (id)initWithFrame:(NSRect)frame {
if (self = [super initWithFrame:frame]) {
}
return self;
}
- (void)drawRect:(NSRect)frame {
NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:frame
xRadius:6.0 yRadius:6.0];
[[NSColor blackColor] set];
[path fill];
}
@end
Al igual que con la ventana, sólo tiene que establecer la clase de contentView de la ventana para que sea su subclase personalizada NSView
. (Utilice el modo de vista de esquema y haga clic en el triángulo de revelación para mostrar el NSView
anidado dentro del icono de la ventana en el archivo de punta). De nuevo, aunque la vista se verá normal en Interface Builder, se verá bien en el tiempo de ejecución.
Luego solo coloque un NSTextField
en la parte superior de la vista y configure el texto en consecuencia.
Tenga en cuenta que, en general, las ventanas sin bordes no son fáciles de usar (por ejemplo, si desea poder arrastrar la ventana, tendrá que volver a agregar esa funcionalidad). Apple tiene un código de ejemplo sobre cómo permitir el arrastre, por ejemplo.

Exactamente lo que estaba buscando. Es curioso, incluso la aplicación de demostración utilizó exactamente el mismo texto de muestra "1-800-MY-APPLE". – amrox
@amrox: Bueno, hice la demostración específicamente ;-) (En realidad, ya tenía un proyecto de muestra de una ventana sin bordes, solo me llevó un minuto ajustarlo para hacer lo que quería). – NSGod
Ahora sería genial si alguien convirtiera esto en un servicio OSX al que pudiera simplemente agregar texto. Había una aplicación como esta (LargeType 1.0) pero se ha descontinuado y las descargas se han eliminado (!?). ¿Estás listo NSGod? – davemyron