2012-06-24 37 views
7

Tôi muốn có cửa sổ có nền mờ trong suốt, giống như những gì mà Thiết bị đầu cuối có thể thực hiện. Xem video này, khoảng 30 giây trong, để xem những gì tôi có nghĩa là: http://www.youtube.com/watch?v=zo8KPRY6-MkCách nhận cửa sổ có nền mờ trong suốt

thấy một hình ảnh ở đây: http://osxdaily.com/wp-content/uploads/2011/04/mac-os-x-lion-terminal.jpg

Tôi đã googling cho một giờ, và không thể có được bất cứ điều gì để làm việc. Tôi tin rằng tôi cần phải bằng cách nào đó tạo ra một lớp hoạt hình lõi và thêm một bộ lọc nền, nhưng tôi đã không thành công cho đến nay ... Tôi chỉ thấy nền màu xám của cửa sổ của tôi. Dưới đây là đoạn code tôi đã có cho đến nay:

Code:

// Get the content view -- everything but the titlebar. 
NSView *theView = [[self window] contentView]; 
[theView setAlphaValue:0.5]; 

// Create core animation layer, with filter 
CALayer *backgroundLayer = [CALayer layer]; 
[theView setWantsLayer:YES]; 
[theView setLayer:backgroundLayer]; 
CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"]; 
[blurFilter setDefaults]; 
[theView layer].backgroundFilters = [NSArray arrayWithObject:blurFilter]; 
[[theView layer] setBackgroundFilters:[NSArray arrayWithObject:blurFilter]]; 

Bất cứ lời khuyên hoặc ví dụ để làm những gì tôi đang cố gắng để làm gì? Cảm ơn!

+0

Bạn đang tìm kiếm một thứ gọi là cửa sổ HUD! Hãy thử tìm kiếm trên google nó sẽ giúp bạn – doNotCheckMyBlog

+0

cảm ơn, nhưng tôi vẫn không nhận được nhiều. tìm thấy một số bài đăng trên diễn đàn đầy hứa hẹn, nhưng đã chỉ ra các ví dụ hoặc bài đăng blog không còn tồn tại. –

+0

Thành thật mà nói, tôi nghi ngờ có thể dễ dàng làm mờ các API riêng tư. Ví dụ. http://stackoverflow.com/questions/5901135/blur-background-behind-maattachedwindow – Vervious

Trả lời

3

không cần cho các lớp và bộ lọc, NSWindow thể làm điều đó bản thân

[mywindow setOpaque:NO]; 
[mywindow setBackgroundColor: [NSColor colorWithCalibratedHue:0.0 saturation:0.0 brightness:0.2 alpha:0.5]]; 

xin vui lòng không sử dụng này, vì nó sẽ alpha thanh tiêu đề của bạn cũng (đăng nó ở đây chỉ trong trường hợp những người khác cần)

[mywindow setOpaque:NO]; 
[mywindow setBackgroundColor: [NSColor blackColor]]; 
[mywindow setAlphaValue:0.5]; 

enter image description here

+0

Đó là lạ, phương pháp đầu tiên không làm việc cho tôi (làm nó trong init). Cũng cố gắng trong awakeFromNib, nơi khác tôi nên làm điều này (Tôi đang ở trong một phân lớp nswindow) – Wesley

+3

Không có hiệu ứng mờ ở đây, phải không? – Raffael

+0

không, điều duy nhất bạn có thể kiểm soát là độ trong suốt (đầy màu sắc). –

3

Để sử dụng trong suốt đề xuất của Jiulong Zhao.

Đối với việc sử dụng nền mờ này

Cuộc gọi trên NSWindow:

[self enableBlurForWindow:self]; 

Chức năng:

-(void)enableBlurForWindow:(NSWindow *)window 
{ 
    //!!!! Uses private API - copied from http://blog.steventroughtonsmith.com/2008/03/using-core-image-filters-onunder.html 

    CGSConnection thisConnection; 
    uint32_t compositingFilter; 
    int compositingType = 1; // Under the window 

    /* Make a new connection to CoreGraphics */ 
    CGSNewConnection(NULL, &thisConnection); 

    /* Create a CoreImage filter and set it up */ 
    CGSNewCIFilterByName(thisConnection, (CFStringRef)@"CIGaussianBlur", &compositingFilter); 
    NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:2.0] forKey:@"inputRadius"]; 
    CGSSetCIFilterValuesFromDictionary(thisConnection, compositingFilter, (__bridge CFDictionaryRef)options); 

    /* Now apply the filter to the window */ 
    CGSAddWindowFilter(thisConnection, [window windowNumber], compositingFilter, compositingType); 
} 

NB: Nó sử dụng một API tin

+0

Có, cách tốt! Và có vẻ như App Store an toàn. –

+13

Ứng dụng lưu trữ an toàn như thế nào khi sử dụng API riêng tư? – strange

+0

http://cocoasnippets.io/cocoa/ui/nswindow/coregraphics/2014/02/27/translucent-nswindow-with-blurred-background.html liên kết này vẫn hoạt động – Jesus

0

Đối với những đọc này trong năm 2017 và sử dụng Swift 4 và muốn thay đổi BG của bạn Alpha bạn có thể thêm dòng sau vào tùy chỉnh của bạn lớp NSWindow:

self.backgroundColor = NSColor.black 
self.backgroundColor = NSColor.init(calibratedHue: 0, saturation: 0, brightness: 0, alpha: 0.2) 

tái bút: Tôi không cần hiệu ứng mờ ảo và khi tôi làm vậy, tôi sẽ cập nhật câu trả lời

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