2010-12-15 23 views
8

Một số ứng dụng, bao gồm Sổ địa chỉ được tích hợp, sử dụng cửa sổ HUD bán trong suốt, với văn bản có bóng lớn. Tôi muốn thực hiện một cửa sổ tương tự trong ứng dụng Cocoa Mac của tôi.Cách triển khai cửa sổ kiểu HUD như "Hiển thị loại lớn" của Address Book

screenshot

Có triển khai miễn phí loại cửa sổ này ở đâu đó không?

Nếu không, cách tốt nhất để triển khai nó là gì?

Trả lời

22

Dưới đây là một dự án mẫu cho thấy làm thế nào để làm điều đó:

http://github.com/NSGod/BlackBorderlessWindow

Về cơ bản, bạn cần phải tạo ra một không biên giới NSWindow lớp con. Cách dễ nhất để làm điều này là đặt kích thước cửa sổ và sắp xếp của bạn trong tệp nib, sau đó đặt lớp của nó làm lớp con tùy chỉnh của bạn. Vì vậy, trong khi nó vẫn sẽ trông giống như một cửa sổ bình thường trong giao diện Builder, tại thời gian chạy nó sẽ xuất hiện khi bạn cần nó.

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

Giá trị alpha sẽ làm cho cửa sổ nửa trong suốt.

Ngoài ra, bạn có thể tạo ra một tùy chỉnh NSView lớp con sẽ vẽ một hình chữ nhật tròn:

@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 

Giống như với các cửa sổ, bạn chỉ cần đặt lớp của contentView của cửa sổ để được bạn tùy chỉnh NSView lớp con. (Sử dụng chế độ xem phác thảo và nhấp vào hình tam giác tiết lộ để hiển thị lồng nhau NSView bên trong biểu tượng của cửa sổ trong tệp nib). Một lần nữa, trong khi khung nhìn sẽ trông bình thường trong Interface Builder, nó sẽ ổn khi chạy.

Sau đó, chỉ cần đặt một NSTextField trên đầu xem và đặt văn bản cho phù hợp. Lưu ý rằng, nói chung, các cửa sổ không viền không dễ làm việc (ví dụ, nếu bạn muốn có thể kéo cửa sổ xung quanh, bạn sẽ cần thêm lại chức năng đó cho chính mình). Ví dụ, Apple có một số mã ví dụ về cách cho phép kéo.

alt text

+0

Chính xác những gì tôi đang tìm kiếm. Hài hước, ngay cả ứng dụng demo cũng sử dụng chính xác văn bản mẫu "1-800-MY-APPLE" giống nhau. – amrox

+2

@amrox: Vâng, tôi đã làm demo cụ thể ;-) (Thực ra, tôi đã có một dự án mẫu của một cửa sổ không viền, nó chỉ mất một phút để tinh chỉnh nó để làm những gì bạn muốn). – NSGod

+0

Bây giờ nó sẽ là tuyệt vời nếu ai đó sẽ làm cho điều này thành một dịch vụ OSX mà bạn chỉ có thể ống một số văn bản vào. Đã có một ứng dụng như thế này (LargeType 1.0) nhưng nó đã bị ngừng và tải xuống đã bị xóa (!?). Bạn lên cho nó NSGod? – davemyron

3

Cảm ơn bạn đã chia sẻ mã này. Giúp tôi rất nhiều! Bạn có thể thêm dòng sau ...

[self setBackgroundColor:[NSColor clearColor]]; 

vào chức năng init của cửa sổ. Điều này loại bỏ các góc trắng.

Các vấn đề liên quan