2010-12-15 6 views

risposta

22

Ecco un progetto di esempio che mostra come farlo:

http://github.com/NSGod/BlackBorderlessWindow

In sostanza, è necessario creare una sottoclasse senza confini NSWindow. Il modo più semplice per farlo è impostare la dimensione e la disposizione della finestra nel file del pennino e quindi impostare la classe come sottoclasse personalizzata. Così mentre apparirà come una normale finestra in Interface Builder, in fase di esecuzione apparirà come se ne avesse bisogno.

@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; 
} 

Il valore alfa renderà la finestra semitrasparente.

Inoltre, è possibile creare una sottoclasse NSView personalizzato che disegnare un rettangolo arrotondato:

@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 

Come con la finestra, è sufficiente impostare la classe del contentView della finestra di essere la vostra abitudine NSView sottoclasse. (Usa la modalità di visualizzazione del profilo e fai clic sul triangolo di apertura per mostrare l'NSView nidificato all'interno dell'icona della finestra nel file del pennino). Di nuovo, mentre la vista apparirà ordinaria in Interface Builder, sembrerà ok in fase di runtime.

Quindi basta posizionare un NSTextField sulla parte superiore della visualizzazione e impostare il testo di conseguenza.

Si noti che, in generale, le finestre senza bordi non sono facili da utilizzare (ad esempio, se si desidera essere in grado di trascinare la finestra in giro, è necessario aggiungerla nuovamente). Apple ha qualche codice di esempio su come consentire il trascinamento, per esempio.

alt text

+0

Esattamente quello che stavo cercando. Divertente, anche l'app demo ha utilizzato esattamente lo stesso testo di esempio "1-800-MY-APPLE". – amrox

+2

@amrox: Beh, ho realizzato la demo specificatamente ;-) (In realtà, avevo già un progetto di esempio di una finestra senza bordi, ci volle solo un minuto per modificarlo per fare ciò che volevi). – NSGod

+0

Ora sarebbe bello se qualcuno lo trasformasse in un servizio OSX in cui inserire semplicemente del testo. C'era un'applicazione come questa (LargeType 1.0), ma è stata interrotta e i download sono stati rimossi (!?). Stai cercando NSGod? – davemyron

3

Grazie per la condivisione di questo codice. Mi ha aiutato molto! È possibile aggiungere la seguente riga ...

[self setBackgroundColor:[NSColor clearColor]]; 

alla funzione init della finestra. Questo rimuove gli angoli bianchi.

Problemi correlati