【发布时间】:2013-02-15 00:33:14
【问题描述】:
我创建了一个绘图程序。效果很好,您可以导入图像并使用不同的颜色和画笔配置对其进行注释。
我的问题是我不知道如何允许擦除。我为 android 编写了同样的应用程序并使用 PorterDuffXferMode 对象进行擦除。我在 Cocoa 中找不到类似的东西。
我是否遗漏了一些明显的东西?我是可可豆。
我正在使用 NSBezierPath 和 NSRectFill 的组合来绘制 NSView。
更新:
在阅读此处的回复之前,我修改了我的代码以在原始 NSView 下方使用嵌套的 NSView。所以我的想法是在底部 Z 顺序视图上绘制背景图像,并在顶部 NSView 上完成所有图形。它画得很好,但是在我的顶视图中,我在要擦除的区域上调用 NSClearRect 并且它是白色的,而不是擦除到底层。
为什么不显示到底层?
我将研究使用 CALayers,但您必须给我一些时间来消化您所写的内容。就像我之前说的,我是 Objective C 和 Cocoa 的菜鸟。
【问题讨论】:
-
有助于了解您的绘画方式。 OpenGL?核心图形?你在画什么?
-
您将必须绘制 2 张图像 - 后面的原始图像加上带有注释的另一张图像。即,如果您在原始图像上绘制,您已经破坏了原始图像中的信息。您必须在某处保存该信息的副本...
-
您可能会发现在您的上下文中绘制到 CGLayer 会很有帮助...查看
CGContextBeginTransparencyLayer()... -
或者在您的视图中使用 2 个 CoreAnimation 层——一个带有您的图像(背景),另一个在您的注释图像顶部。
-
>如果您使用基于图层的视图,情况可能大致相同--cf。 developer.apple.com/library/mac/#documentation/Cocoa/Reference/…
标签: macos cocoa drawing nsview quartz-graphics