2012-06-24 4 views
7

Я хотел бы получить окно с полупрозрачным размытым фоном, точно так же, как то, что может сделать терминал. Смотрите это видео, около 30 секунд в, чтобы увидеть, что я имею в виду: http://www.youtube.com/watch?v=zo8KPRY6-MkКак получить окно с полупрозрачным размытым фоном

Смотрите изображение здесь: http://osxdaily.com/wp-content/uploads/2011/04/mac-os-x-lion-terminal.jpg

Я погуглить в течение часа, и не может получить что-нибудь работать. Я считаю, что мне нужно каким-то образом создать базовый слой анимации и добавить фоновый фильтр, но до сих пор я не увенчался успехом ... Я просто вижу серый фон моего окна. Вот код, который я получил до сих пор:

Код:

// 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]]; 

Любые советы или примеры, чтобы делать то, что я пытаюсь сделать? Спасибо!

+0

Вы ищете что-то, называемое HUD-окном! Попробуйте найти в google, это поможет вам – doNotCheckMyBlog

+0

спасибо, но я все равно не получаю много. нашел несколько многообещающих сообщений на форуме, но указал на примеры или сообщения в блогах, которые больше не существуют. –

+0

Честно говоря, я сомневаюсь, что размытие возможно без частных API. Например. http://stackoverflow.com/questions/5901135/blur-background-behind-maattachedwindow – Vervious

ответ

3

без необходимости слоев и фильтров, NSWindow может сделать это сам

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

пожалуйста, не используйте это, так как это альфа вашей строки заголовка также (разместить его здесь только в случае, если другие нуждаются)

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

enter image description here

+0

Это странно, первый метод не работает для меня (это делается в init). Также попытался в awakeFromNib, где еще я должен это сделать (я в подклассе nswindow) – Wesley

+3

Нет эффекта размытия здесь, правильно? – Raffael

+0

нет, единственное, что вы можете контролировать - это прозрачность (красочная). –

3

Для внушения использовать прозрачность Jiulong Чжао.

Для размытого фона использования этого

ВЫЗОВ МАСТЕРА на NSWindow:

[self enableBlurForWindow:self]; 

Функция:

-(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: Он использует частный API

+0

Да, хороший путь! И выглядит как App Store в безопасности. –

+13

Как безопасно хранить приложение, когда оно использует частные API? – strange

+0

http://cocoasnippets.io/cocoa/ui/nswindow/coregraphics/2014/02/27/translucent-nswindow-with-blurred-background.html эта ссылка все еще работает – Jesus

0

Для тех, прочитав это в 2017 году и используя Swift 4 и желая изменить BG Альфа вы можете добавить следующую строку в ваш обычай NSWindow класс:

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

P.S. Мне не нужен эффект размытия, и когда я это сделаю, я обновлю ответ

Смежные вопросы