HMDT - Logic and Intuition -

about HMDT

Cocoa Programming Tips 1001

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

back to top content

Copyright © 2002-2006 HMDT. All rights reserved.