gpt4 book ai didi

cocoa - 如何更改UIKit UIImage :drawInRect method to AppKIt NSImage:drawInRect Method

转载 作者:行者123 更新时间:2023-12-03 16:13:55 26 4
gpt4 key购买 nike

我正在将 iphone 应用程序移植到 Mac 应用程序,我必须将所有 UIKit 相关类更改为 AppKit。如果您能在这方面帮助我,我将不胜感激。这是执行以下部分的最佳方法吗..

Iphone 应用程序-->使用 UIKit

UIGraphicsPushContext(ctx);
[image drawInRect:rect];
UIGraphicsPopContext();

Mac 操作系统——使用 AppKit

[NSGraphicsContext saveGraphicsState];
NSGraphicsContext * nscg = [NSGraphicsContext graphicsContextWithGraphicsPort:ctx flipped:YES];
[NSGraphicsContext setCurrentContext:nscg];
NSRect rect = NSMakeRect(offset.x * scale, offset.y * scale, scale * size.width, scale * size.height);
[NSGraphicsContext restoreGraphicsState];

[image drawInRect:rect fromRect:NSMakeRect( 0, 0, [image size].width, [image size].height )
operation:NSCompositeClear
fraction:1.0];

最佳答案

The docsthe docs是你的 friend 吗?他们会解释很多你在这里误用的东西。

[NSGraphicsContext saveGraphicsState];
NSGraphicsContext * nscg = [NSGraphicsContext graphicsContextWithGraphicsPort:ctx flipped:YES];
[NSGraphicsContext setCurrentContext:nscg];

您将图形状态保存在当前上下文中,然后立即创建一个新上下文并将其设置为当前上下文。

NSRect rect = NSMakeRect(offset.x * scale, offset.y * scale, scale * size.width, scale * size.height);

这显然就是你攒下的全部钱了。创建矩形不受 gstate 的影响,因为它不是绘图操作(矩形只是一组数字;您不是在此处绘制矩形)。

此外,您应该使用当前的 transformation matrix对于规模。

[NSGraphicsContext restoreGraphicsState];

然后您将存储在您创建的上下文中,而不是您保存的上下文中。

[编辑]一年半后再次查看此内容,我认为您误解了 saveGraphicsStaterestoreGraphicsState方法作为 UIGraphicsPushContext 的对应项和UIGraphicsPopContext 。他们不是; saveGraphicsStaterestoreGraphicsState推送和弹出当前上下文的图形状态。当前上下文是单独控制的( setCurrentContext: )并且没有推送/弹出 API。 [/编辑]

我假设您位于 CALayer 的 drawInContext: 中方法?如果这是在 NSView 中,那么您已经拥有当前上下文,不需要(也不应该)创建一个。

[image drawInRect:rect fromRect:NSMakeRect( 0, 0, [image size].width, [image size].height )
operation:NSCompositeClear
fraction:1.0];

The NSCompositeClear operation清除目标像素,就像您最喜欢的绘画程序中的橡皮擦工具一样。它不绘制图像。您想要the NSCompositeSourceOver operation .

关于cocoa - 如何更改UIKit UIImage :drawInRect method to AppKIt NSImage:drawInRect Method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2681846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com