2009-06-30 17 views
1

NSViewのサブクラスを持つウィンドウがあります。ビューの中で、私はNSImageを入れました。NSImage rotation

画像の左上の(新しい)左隅を維持して、画像を90度回転させたいと考えています。もちろん、私はイメージを回転させ、原点を元に戻すためにそれを翻訳する必要があります。

Carbonでは、私が望むことをするCGContextRotateCTMが見つかりました。しかし、私はObjCで適切な呼び出しを見つけることができません。 setFrameCenterRotationは何もしていないようですが、setFrameRotationでは元がどこにあるかわからないので、私は都合の良いように翻訳できます。

移動しているようです。ウィンドウのサイズを変更すると、イメージ(またはその一部)が置かれ、奇妙なクリッピング問題が発生するように見えます。スクロールすると、別の(とは限りません)場所にジャンプします。

これは誰にとっても意味がありますか?

おかげ

答えて

7

は、私はこれを行う方法はNSAffineTransformを使用することです(私はあなたがあなたの質問内にObjCココアを意味していないと仮定)私が仕事のアプリとココアのために、画面上のテキストを回転させます。

はここで何を上記しすると、あなたに描画されている座標系を回転させることであるので、あなたがここで少しトリッキーを得ることができます回転の

double rotateDeg = 90; 
NSAffineTransform *rotate = [[NSAffineTransform alloc] init]; 
NSGraphicsContext *context = [NSGraphicsContext currentContext]; 

[context saveGraphicsState]; 
[rotate rotateByDegrees:rotateDeg]; 
[rotate concat]; 

    /* Your drawing code [NSImage drawAtPoint....]for the image goes here 
     Also, if you need to lock focus when drawing, do it here.  */ 

[rotate release]; 
[context restoreGraphicsState]; 

数学を始める必要がありスニペットです。私の90度回転は反時計回りです。

+0

はい、私はココアを意味しました だから、私はちょうど上記を行い、[view setNeedsDisplay:YES]する必要がありますか? 私は、setNeedsDisplayがdrawRect:を呼び出していることを知っています。これは描画作業を行います...私がそれを行うときに何も起こりそうにないからです。 –

+0

上記のコードスニペットは、実際にNSViewサブクラスのdrawRect:メソッド内にあるはずです。 NSAffineTransformは、ビューが再描画されるたびに実行する必要があります。 –

+0

優秀!今は翻訳の仕組みを理解するだけです。 私が翻訳した後、四角形を変更して実際に正しく表示されるようにする問題があります。 –