2009-06-30 36 views
1

我有一個窗口,其中包含NSView的子類。在視圖內部,我放置了一個NSImage。NSImage旋轉

我希望能夠將圖像旋轉90度,將圖像的(新)左上角保留在視圖的左上角。當然,我將不得不旋轉圖像,然後翻譯它將原點放回原處。在Carbon中,我找到了我想要的CGContextRotateCTM。但是,我無法在ObjC中找到正確的呼叫。 setFrameCenterRotation似乎沒有做任何事情,在setFrameRotation中,我似乎無法弄清楚原點在哪裏,所以我可以適當地翻譯。

它似乎在移動。當我調整窗口大小時,它會放置圖像(或其中的一部分,我似乎也有一個奇怪的剪輯問題),當我滾動時,它會跳轉到不同的位置(而不是始終位於saem)。

這對任何人都有意義嗎?

感謝

回答

7

我旋轉屏幕上的文本的應用程序,我的工作和可可(我假設你的意思是可可和不會ObjC在你的問題),這樣做是使用NSAffineTransform的方式。

這裏有一個片段,它應該讓你開始

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

是的,我的意思是可可,謝謝 所以,我應該只需要做到上述,然後[查看setNeedsDisplay:是]? 我知道setNeedsDisplay使得視圖調用drawRect :,它執行繪圖工作......因爲當我這樣做時似乎沒有任何事情發生。 – 2009-06-30 19:20:20