Voici un exemple de projet qui montre comment le faire:
http://github.com/NSGod/BlackBorderlessWindow
Fondamentalement, vous devez créer une sous-classe NSWindow
sans frontières. La méthode la plus simple consiste à définir la taille et l'agencement de votre fenêtre dans le fichier nib, puis à définir sa classe comme votre sous-classe personnalisée. Ainsi, même si cette fenêtre ressemble toujours à une fenêtre normale dans Interface Builder, elle apparaîtra à l'exécution comme vous le souhaitez.
@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;
}
La valeur alpha rendra la fenêtre semi-transparente.
En outre, vous pouvez créer une sous-classe NSView
qui dessinera un rectangle arrondi:
@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
Comme avec la fenêtre, vous définissez simplement la classe de contentView de la fenêtre pour être votre sous-classe personnalisée NSView
. (Utilisez le mode d'affichage hiérarchique et cliquez sur le triangle d'affichage pour afficher le NSView
imbriqué à l'intérieur de l'icône de la fenêtre dans le fichier nib). Encore une fois, alors que la vue semblera ordinaire dans Interface Builder, elle sera correcte à l'exécution.
Ensuite, placez simplement un NSTextField
en haut de la vue et définissez le texte en conséquence. Notez que, en général, les fenêtres sans bordures ne sont pas faciles à utiliser (par exemple, si vous voulez pouvoir faire glisser la fenêtre, vous devrez l'ajouter vous-même). Apple a un exemple de code sur la façon d'autoriser le glisser, par exemple.
Exactement ce que je cherchais. Drôle, même l'application de démonstration utilisait exactement le même exemple de texte "1-800-MY-APPLE". – amrox
@amrox: Eh bien, j'ai fait la démo en particulier ;-) (En fait, j'avais déjà un exemple de projet de fenêtre sans bordure, il ne m'a fallu qu'une minute pour la modifier pour faire ce que vous vouliez). – NSGod
Maintenant, ce serait génial si quelqu'un faisait cela dans un service OSX dans lequel vous pourriez simplement introduire du texte. Il y avait une application comme celle-ci (LargeType 1.0) mais elle a été abandonnée et les téléchargements ont été supprimés (!?). Vous êtes prêt pour ça NSGod? – davemyron