2010-12-15 10 views

Odpowiedz

22

Oto przykładowy projekt, który pokazuje, jak to zrobić:

http://github.com/NSGod/BlackBorderlessWindow

Zasadniczo trzeba tworzyć obramowania NSWindow podklasy. Najłatwiej to zrobić, ustawiając rozmiar i układ okna w pliku nib, a następnie ustawiając jego klasę na niestandardową podklasę. Tak więc, chociaż nadal będzie wyglądać jak normalne okno w Kreatorze interfejsów, w czasie wykonywania będzie wyglądać tak, jak tego potrzebujesz.

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

Wartość alfa spowoduje, że okno będzie półprzezroczyste.

Ponadto, można utworzyć niestandardową NSView podklasę, która będzie czerpać okrągły prostokąt:

@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 

Podobnie jak w oknie, wystarczy ustawić klasę okna contentView być niestandardowe NSView podklasy. (Użyj trybu widoku konspektu i kliknij trójkąt ujawnienia, aby wyświetlić zagnieżdżoną NSView w ikonie okna w pliku nib). Ponownie, podczas gdy widok będzie wyglądać zwyczajnie w Konstruktorze interfejsów, będzie wyglądał dobrze w środowisku wykonawczym.

Następnie wystarczy umieścić na wierzchu widok NSTextField i odpowiednio ustawić tekst.

Zauważ, że ogólnie okna bez obramowania nie są łatwe w użyciu (na przykład, jeśli chcesz przeciągnąć okno, musisz dodać tę funkcję ponownie). Apple ma przykładowy kod, jak pozwolić na przeciąganie.

alt text

+0

Dokładnie tego, czego szukałem. Zabawne, nawet aplikacja demo używa dokładnie tego samego tekstu próbki "1-800-MY-APPLE". – amrox

+2

@amrox: Cóż, zrobiłem demo specjalnie ;-) (Właściwie to już miałem przykładowy projekt okna bez obramowania, wystarczyło minutę, aby go poprawić, aby zrobić to, co chciałeś). – NSGod

+0

Teraz byłoby wspaniale, gdyby ktoś uczynił to w usłudze OSX, do której można by po prostu przesłać jakiś tekst. Była taka aplikacja (LargeType 1.0), ale została przerwana, a pliki do pobrania usunięte (!?). Chcesz do niego NSGod? – davemyron

3

Dziękujemy za udostępnienie tego kodu. Bardzo mi pomogło! Możesz dodać następujący wiersz ...

[self setBackgroundColor:[NSColor clearColor]]; 

do funkcji init okna. Usuwa białe rogi.

Powiązane problemy