Geometry 関数
NSBundle
NSDictionary
NSFileManager
NSMutableAttributedString
NSNumber
NSScanner
NSString
NSTimer
Graphic 関数
NSApplication
NSBezierPath
NSCell
NSColor
NSCursor
NSCustomImageRep
NSDocument
NSDocumentController
NSDragging
NSEvent
NSFontManager
NSGraphicsContext
NSImage
NSMenu
NSOutlineView
NSPanel
NSPopUpButton
NSResponder
NSScrollView
NSString 追加
NSTableColumn
NSTableView
NSTextStorage
NSTextView
NSToolbar
NSView
NSWindow
-半透明ウィンドウを表示する
-透明ウィンドウを使う
NSWorkspace
その他
.nib ウィンドウ
Views パレット
クラス
インスタンス変数
メソッド
CFXML
Carbon Event
Carbon Graphics
Cocoa で日本語
メソッド
その他

- 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



[Home] [Download] [Archives] [BBS] [Cocoa Programming Tips 1001] [Core Foundation の秘密] [Safari Developer Center] [はじめてのブラウザのつくり方] [Sketch BP] [スクリーンセイバーを作ろう] [Objective-C 最適化] [Authorization API 完全理解] [Mac OS X Programming Books Review] [オブジェクト指向の言語比較論] [panther-dev]

mailto: mkino@xd5.so-net.ne.jp