2010-12-21 18 views
1

私は本当に初心者のココアの開発者ですMac OSXでCocoaでOSD風のウィンドウを作成するには?

シナリオ:私は、文書の終わりに達すると、 "ラップアラウンド"と呼ばれる、文書の終わりに達するまで検索しました。

私はラップを行うと、しばらく(1秒間)画面上で点滅するウィンドウを表示したいのですが、OSD(On Screen Display)コントロールウィンドウ、TextWrangler、XCodeはテキスト検索がベギン。

どうすれば同様のウィンドウを実装できますか?

+1

実際、XCodeはビューを使用するだけですが、TextWranglerとBBEditはウィンドウを使用します。 – ughoavgfhw

答えて

3

これを行うためのビューを実装するのは比較的簡単です。 NSViewサブクラスの次のコードは、ウィンドウに配置されたときにイベントを無視する部分的に透明な丸い矩形を表示します。

- (void)drawRect:(NSRect)dirtyRect { 
    [[NSColor colorWithDeviceWhite:0 alpha:.7] set]; 
    [[NSBezierPath bezierPathWithRoundedRect:self.bounds xRadius:10 yRadius:10] fill]; 
    //Additional drawing 
} 
- (NSView *)hitTest:(NSPoint)aPoint { 
    return nil; 
} 
- (BOOL)acceptsFirstResponder { 
    return NO; 
} 
- (BOOL)isOpaque { 
    return NO; 
} 

あなたはウィンドウでこれを行うにはしたくない場合は、ボーダレス、非不透明なウィンドウを作成し、コンテンツビューとしてこれを設定する必要があります。また、drawRect:メソッドの開始時に、ビューの境界を鮮明な色で塗りつぶす必要があります。

//Create and display window 
NSPanel *panel = [[NSPanel alloc] initWithFrame:NSMakeRect(0,0,300,200) styleMask:NSBorderlessWindowMask|NSNonactivatingPanelMask backing:NSBackingStoreBuffered defer:YES]; 
[panel setOpaque:NO]; 
MyViewSubview *view = [MyViewSubview new]; 
[panel setContentView:view]; 
[view release]; 
[p setLevel:NSScreenSaverWindowLevel]; 
[p orderFront:nil]; 

//Add these two lines to the beginning of the drawRect: method 
[[NSColor clearColor set]; 
NSRectFill(self.bounds); 

ただし、このウィンドウはイベントを傍受し、標準の方法を使用してこれを無効にできませんでした。

ビューをフェードアウトするには、NSViewAnimationをチェックするか、NSTimerオブジェクトを使用して手動で行います。