首页 文章

NSImage旋转

提问于
浏览
1

我有一个窗口,其中包含NSView的子类 . 在视图中,我放了一个NSImage .

我希望能够将图像旋转90度,使图像的(新的)左上角保持在视图的左上角 . 当然,我必须旋转图像,然后翻译它以将原点放回原位 .

在Carbon中,我找到了CGContextRotateCTM,它可以满足我的需求 . 但是,我在ObjC找不到合适的电话 . setFrameCenterRotation似乎什么也没做,而在setFrameRotation中,我似乎无法弄清楚原点在哪里,所以我可以适当地翻译 .

似乎有所动作 . 当我调整窗口大小时,它会放置图像(或者它的一部分,我似乎也有一个奇怪的剪辑问题),当我滚动时,它会跳转到另一个(并不总是saem)位置 .

这对任何人都有意义吗?

谢谢

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度旋转是逆时针旋转 .

相关问题