1

我有一个窗口,里面有一个 NSView 的子类。在视图内部,我放置了一个 NSImage。

我希望能够将图像旋转 90 度,将图像的(新)左上角保持在视图的左上角。当然,我将不得不旋转图像,然后将其平移以将原点放回原处。

在 Carbon 中,我发现 CGContextRotateCTM 可以满足我的要求。但是,我在 ObjC 中找不到正确的调用。setFrameCenterRotation 似乎没有做任何事情,而在 setFrameRotation 中,我似乎无法弄清楚原点在哪里,所以我可以适当地翻译。

它似乎在移动。当我调整窗口大小时,它会放置图像(或其中的一部分,我似乎也有一个奇怪的剪辑问题),当我滚动时,它会跳转到不同的(并不总是相同的)位置。

这对任何人都有意义吗?

谢谢

4

1 回答 1

7

我为我正在使用的应用程序旋转屏幕上的文本,而 Cocoa(我假设您的问题是指 Cocoa 而不是 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 度旋转是逆时针旋转。

于 2009-06-30T19:01:32.117 回答