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.
Esattamente quello che stavo cercando. Divertente, anche l'app demo ha utilizzato esattamente lo stesso testo di esempio "1-800-MY-APPLE". – amrox
@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
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