2012-03-24 7 views
2

私はホットキーを押したときにユーザーに "ポップアップ"または "通知"を表示するアプリケーションを作成しています。QuicksilverのようなNSWindow

ボリュームや明るさを変更したときに表示されるメッセージやQuicksilver App入力ウィンドウのように、メッセージをフローティングメッセージとして表示します。

は、私はそれは、フェードインするために5-8秒のためにそこに滞在する、とフェードアウトし、アルファを持っていたいです。

...問題は、私がそれをどのように始めるべきか分かりません。私は試しました:

NSRect frame = NSMakeRect(0, 0, 600, 65); 
_myWindow = [[NSWindow alloc] initWithContentRect:frame 
       styleMask:NSBorderlessWindowMask 
       backing:NSBackingStoreBuffered 
       defer:NO]; 
[_myWindow setBackgroundColor:[NSColor blueColor]]; 
[_myWindow center]; 
[_myWindow makeKeyAndOrderFront:NSApp]; 

もちろん、私がやろうとしていることではありません。

すべてのヘルプは、私は、このための適切な用語はベゼルウィンドウであると考えてい;-)

答えて

6

歓迎です。クイックシルバーは、オープンソース(https://github.com/quicksilver/Quicksilver)であるので、あなたは、彼らはそれを行う方法を見ることができますが、私は、カスタムNSWindowサブクラスと似たような達成しました:

- (id) initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag 
{ 
    if((self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:bufferingType defer:flag])) { 
     [self setOpaque:NO]; 
     [self setIgnoresMouseEvents:YES]; 
     [self setLevel:NSFloatingWindowLevel]; 
     [self setBackgroundColor:[NSColor clearColor]]; 
    } 

    return self; 
} 

と窓コントローラによって制御されるアニメーション:

- (void) windowDidLoad 
{ 
    CAAnimation *animation = [CABasicAnimation animation]; 
    [animation setDelegate:self]; 
    [[self window] setAnimations:[NSDictionary dictionaryWithObject:animation forKey:@"alphaValue"]]; 
} 
を次のようなコード、内窓のフェードインが動作するはずにする

[[self window] setAlphaValue:0.0]; 
[[[self window] animator] setAlphaValue:1.0]; 

[[self window] orderFront:self]; 

私は、これはプラグアンドプレイソリューションではありません実現が、それはあなたを始めなければなりません。

+0

ありがとうございました。私はそれをこのように動作させようとします^^。 –

+0

ちょうど**働いた** !! –

関連する問題