2012-04-01 10 views
1

Ich habe eine Unterklasse von NSWindow, um eines meiner Fenster für meine App anzupassen. Ich habe alles eingestellt, aber ich bin nicht sicher, wie man die Ecken rund machen soll. Derzeit ist mein Fenster ein transparentes rechteckiges Fenster mit einigen Schaltflächen, Beschriftungen und einem Textfeld darin.Ziel C, abgerundete Ecke benutzerdefinierte Fenster?

Die Klasse umfasst:

#import "TransparentRoundRectWindow.h" 

@implementation TransparentRoundRectWindow 

-(id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag 
{ 
    self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]; 
    if (self) { 
     [self setAlphaValue:0.75]; 
     [self setOpaque:YES]; 
     [self setHasShadow:YES]; 
     [self setBackgroundColor:[NSColor clearColor]]; 
    } 
    return self; 
} 

-(BOOL)canBecomeKeyWindow 
{ 
    return YES; 
} 

Ich brauche nur die Ecken rund leisten zu können. Ich habe versucht, nach ähnlichen Situationen zu suchen, und habe einige von ihnen gesehen, die erklärten, die Methode drawRect außer Kraft zu setzen, aber ich konnte sie nicht zur Arbeit bringen. Wie könnte ich das tun? (Ich benutze Mac OS X Lion)

Vielen Dank im Voraus.

Antwort

6

Sie müssen auf Ihr Fenster Opaque auf Nein einstellen. Und Unterklasse Die Ansicht Ihres Fensters.

Fensterunterklasse:

-(id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag 
{ 
    self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO]; 
    if (self) { 

     [self setOpaque:NO]; 
     [self setHasShadow:YES]; 
     [self setBackgroundColor:[NSColor clearColor]]; 
    } 
    return self; 
} 

-(BOOL)canBecomeKeyWindow 
{ 
    return YES; 
} 

der Fensteransicht Unterklasse:

- (void)drawRect:(NSRect)rect 
{ 
    NSBezierPath * path; 
    path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:8 yRadius:8]; 

    [[NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:0.75] set]; 
    [path fill]; 
} 

Ergebnis:

result

Mehr Erklärung, wie dies zu tun:

neue NSView Klasse Erstellen und Einfügen „Ansicht Unterklasse des Fensters“ Code, die ich in ihnen geschrieben hat. Dann gehe zur Ansicht Deines Fensters.

Hier ist das Fenster Darstellung klicken Sie darauf:

Window's view

Gehen Sie auf die Identität Inspektor und setzen Klasse zum erstellten Klasse:

enter image description here

+0

Danke für die Antwort. Also sind diese zwei in getrennten Klassen? Ich lege alle in die gleiche Klasse. Ich bin wirklich neu in Objective-c, daher wäre es noch hilfreicher, wenn Sie mir kurz erklären könnten, wie Sie die View-Unterklasse des Fensters hinzufügen können. Wenn ich setOpaque in NO ändere, erhalte ich ein Fenster, das vollständig transparent ist, obwohl ich es nur teilweise transparent machen möchte (mit Alpha-Wert 0,75). Mache ich etwas falsch? – Dennis

+0

@Dennis Ich fügte weitere Erklärungen hinzu, wie man das macht. –

+0

JA, es hat endlich funktioniert !! Ich danke dir sehr. Außer jetzt haben alle Objekte innerhalb des Fensters diese weißen Ecken. Das Textfeld, die Schaltflächen und das Label haben die zusätzlichen quadratischen Ecken. Würde es trotzdem sein, sie zu entfernen? Muss ich für jedes dieser Objekte auch eine Unterklasse erstellen? – Dennis

Verwandte Themen