|
- Application Kit-
NSWindow
Application Kit - NSWindow
半透明ウィンドウを表示する
Keywords: setAlphaValue:
NSWindow で半透明なウィンドウを表示させてみよう。ここで半透明っていうのは、後ろが透けて見えるウィンドウのことだ。

これを実現するには、NSWindow のメソッド setAlphaValue: を使えばいい。
Application Kit/NSWindow.h
- (void)setAlphaValue:(float)windowAlpha
引数の windowAlpha に、0.0 から 1.0 の値を渡してやればいい。上の図のようなサンプルプログラムを作ってみた。このサンプルでは、スライダーを動かすと、ウィンドウの透明度が 0.0 から 1.0 まで変化する。0.0 にすると見えなくなるので注意。
サンプルで書かれているソースコードは、これだけ。
TransparencyWindow/Controller.m
- (IBAction)alphaValueChanged:(id)sender
{
[_window setAlphaValue:[sender floatValue]];
}
このアクションをスライダーにつなげている。スライダーが保持している値を、setAlphaValue: を使ってウィンドウの透明度として設定してやるだけだ。
■サンプルダウンロード:
TransparencyWindow.tgz
Application Kit - NSWindow
透明ウィンドウを使う
Keywords: setBackgroundColor:, setOpaque:
今度は NSWindow で、透明なウィンドウを実現してみよう。ここでいう透明なウィンドウっていうのは、上に表示されているビューの透明な部分が透明になるウィンドウだ。これを使うと、いろいろな形のウィンドウを作れる。たとえば、システムに標準で付いてくる時計アプリケーションは、これを使っているよ。
この透明なウィンドウを実現するには、基本的には 2 つの NSWindow のメソッドを呼べばいい。1 つは setBackgroundColor:。これはウィンドウの背景を設定するメソッドで、これに clearColor を設定してやる。もう 1 つは setOpaque: だ。これはウィンドウを不透明にするかどうかを設定する。ここでは透明にするので、「NO」にしてやる。ややこしいので気をつけてくれ。呼び出しは、こんな感じになる。
(sample)
[window setBackgroundColor:[NSColor clearColor]];
[window setOpaque:NO];
基本的にはこれでいいんだけど、実際にやってみるとうまくいかないこともあるんだ。どうも、透明にするには背景と合成しないといけないんだけど、これにはオフスクリーンのバッファがフラッシュされないといけないらしい。普通に絵を描くだけならば問題が無いんだけど、アニメーションをやったりするような、ちょっと特殊な描画をする場合は、NSWindow の flushWindow 使って強制的にフラッシュするとうまくいくことがある。ただし、頻繁に flushWindow を呼び出すとパフォーマンスに問題が出る可能性があるので、できるだけ最小限になるように工夫してみてくれ。
サンプルとして、画面のあちこちに Dock からアイテムを削除するときにでる煙を表示するアプリケーションを作ってみた。

これは、動的に小さいウィンドウを作り、それを透明にして上に画像を描くことで実現しているぜ。細かな実装は、ソースコードを見てくれ。
■サンプルダウンロード:
Poof.tgz
|