2010-12-15 4 views

Respuesta

22

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.

alt text

+0

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

+2

@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

+0

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

3

Gracias por compartir este código. ¡Me ayudo mucho! Puede añadir la siguiente línea ...

[self setBackgroundColor:[NSColor clearColor]]; 

a la función init de la ventana. Esto elimina las esquinas blancas.

Cuestiones relacionadas