ページ

2010年2月11日木曜日

v10.6 以降の NSImage 描画で flip

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

以前、-[NSImage setFlipped:] が Deprecated になったことを紹介した。

Cocoaの日々: NSImage の isFlipped/setFlipped: が Deprecated

その時の対処方法として NSAffineTransform を使う方法を紹介したが、そんなことをしなくても NSImage に新しいメソッドが追加されていることがわかった(Kenさん Thanks)。

Mac Dev Center: NSImage Class Reference


これを使うと次のコードを書き換えられる。

v10.5まではこうだった。

[image setFlipped:YES];
[image drawInRect:[self bounds]
fromRect:NSZeroRect
operation:NSCompositeSourceOver
fraction:1.0];

v10.6からこう書ける。

[image drawInRect:[self bounds]
fromRect:NSZeroRect
operation:NSCompositeSourceOver
fraction:1.0
   respectFlipped:YES
hints:nil];


なお最後の hints では NSAffineTransform と NSImageHintInterpolation を指定することができる。1つのメソッドで描画だけでなく Affine変換や拡大縮小画質の指定ができるようになった。これは便利。

Mac Dev Center: NSImage Class Reference