NSImage不推荐使用的方法:setFlipped替换

时间:2014-07-16 15:33:11

标签: objective-c deprecated nsimage

在文档中,https://developer.apple.com/library/mac/documentation/cocoa/reference/applicationkit/classes/NSImage_Class/DeprecationAppendix/AppendixADeprecatedAPI.html#jumpTo_17

它说setFlipped应该替换为drawInRect - 但在查看了几个示例和许多失败的尝试后,我无法使用传递的参数来翻转我的图像进入drawInRect

是否有人有经验,或知道如何使用drawInRect方法翻转图像?或者有不同的方式吗?

提前致谢!

2 个答案:

答案 0 :(得分:3)

弃写说明的编写期望-setFlipped:用于补偿绘制正面向上翻转视图。这与你的用例相对应,你似乎试图将其颠倒,所以解释没有帮助。

要绘制颠倒,您应使用NSAffineTransform调整图形上下文的变换。文档讨论了creating a flip transform关于整个视图的翻转,但是你必须计算相对于翻转坐标系的绘制位置。我认为将原点转换为目标矩形的左上角更容易,将Y方向缩放-1,然后绘制(0,0)。

[NSGraphicsContext saveGraphicsState];

NSAffineTransform* xform = [NSAffineTransform transform];
[xform translateXBy:NSMaxX(destRect) yBy:NSMinY(destRect)];
[xform scaleXBy:1 yBy:-1];
[xform concat];

[image drawInRect:NSMakeRect(0, 0, NSWidth(destRect), NSHeight(destRect))];

[NSGraphicsContext restoreGraphicsState];

答案 1 :(得分:1)

我知道这是一个老问题,但我无法使用上述答案,这是我的解决方案:

NSImage *image...
[image drawInRect:destRect fromRect:NSZeroRect operation:NSCompositeSourceIn fraction:1.0 respectFlipped:YES hints:nil];

希望这可以帮助某人:)