当前位置:  开发笔记 > 编程语言 > 正文

NSImage旋转

如何解决《NSImage旋转》经验,为你挑选了1个好方法。

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

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

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

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

这对任何人都有意义吗?

谢谢



1> Jeff Hellman..:

我在屏幕上为我正在处理的应用程序旋转文本和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度旋转是逆时针旋转.


实际上,必须在**[NSGraphicsContext currentContext]之前完成锁定焦点,因为它设置了当前上下文.
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有