7

ターミナルでできることと同じように、半透明のぼやけた背景を持つウィンドウを取得したいと思います。このビデオの約 30 秒を見て、私が何を意味するかを確認してください: http://www.youtube.com/watch?v=zo8KPRY6-Mk

ここで画像を参照してください: http://osxdaily.com/wp-content/uploads/2011/04/mac-os-x-lion-terminal.jpg

私は1時間グーグルしてきましたが、何も機能しません。どうにかしてコア アニメーション レイヤーを作成し、背景フィルターを追加する必要があると思いますが、これまでのところ成功していません。ウィンドウの背景が灰色になっているだけです。これまでに得たコードは次のとおりです。

コード:

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

私がやろうとしていることをするためのヒントや例はありますか? ありがとう!

4

3 に答える 3

2

レイヤーとフィルターは必要ありません。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];

ここに画像の説明を入力

于 2013-01-11T22:09:09.690 に答える
2

透明性については、Jiulong Zhao の提案を使用してください。

ぼやけた背景にはこれを使用します

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

注意: プライベート API を使用します

于 2013-01-23T08:29:51.903 に答える