0

我正处于 Mac 应用程序的概念阶段,它应该让用户轻松选择和布局图像以进行打印。这是一个基于文档的应用程序,一个文档可以有多个页面,上面有很多不同大小和旋转的图片。UI 有点像 Pages.app 的 UI。

这些图片可能是大的高分辨率图像。用户还应该能够以图像提供的最佳质量打印它们。

我重新观看了一些关于 Quartz、2D 绘图优化和 NSView 的 WWDC 会议。

我知道有几种不同的方法可以完成我想做的事情,即:

  1. drawRect:为“页面”使用自定义视图并使用 Core Graphics/Quartz绘制图像。使用 CG 变换来旋转和缩放图像。

  2. 也为“页面”使用自定义视图,但使用 NSImageView-subviews 来显示图像。使用核心动画和图层变换来缩放/旋转图像。

对此的最佳做法是什么?使用 Core Graphics 绘图还是使用 NSViews?为什么?

非常感谢!

  • 约翰内斯
4

3 回答 3

2

取决于这些页面的交互性。如果有很多鼠标交互,例如拖动、选择等。我会选择视图。如果您想要流畅的动画,我什至会使用普通的 CALayers,并将其内容设置为一张图像。这也可以让您对图像进行 zPosition 以防它们重叠。基于视图的解决方案使 z 排序变得困难。drawRect 方法应该是最快的,但是您很难集成用户交互,并且您必须手动进行 z-order。

于 2012-05-16T16:44:36.293 回答
2

这是我打开我的两个 Apple 技术支持事件之一时得到的回复:

嗨约翰内斯,

感谢您就有关打印和构建应用程序通用 UI(带视图)的不同方法的问题联系 Apple DTS。

有一种趋势是在 OS X 中使用支持层的视图(利用核心动画层),其动机是能够在需要时轻松地为应用程序的用户界面设置动画,而几乎不需要做任何工作。但是,在打印方面,您最好为自定义视图实现 drawRect ,以便在渲染到打印上下文时可以以“全分辨率”绘制视图内容。

相反,如果您使用图层支持的视图作为这些图层来“renderInContext”,则图层内容将用于渲染,通常不会将其设置为源文档/图像的完整分辨率。这是因为图层支持的视图需要额外的内存来存储这些位图(缓存的图层内容),因此,建议它们的大小适合屏幕(可能不一定适合打印页面的大小)。

这是否有助于指导您的应用程序架构?请告诉我。

所以基本上这意味着使用图层支持的视图可能会导致次优的打印质量。我已经回答了一些后续问题(“如何wantsLayer = NO在打印帮助之前设置 rootView?”),并会在我得到答案后立即发布答案。

于 2012-05-30T15:19:58.350 回答
1

这三种方法都应该有效。由于无论如何您都应该使用按比例缩小的大图像表示,我认为不会有太大区别。做你觉得最舒服的事情。

我的猜测只是使用支持图层的 NSViews(一个可拖动的图像)可能最适合初学者。如果您发现性能不足,您可以随时进行微优化。请注意,您可能必须使您的视图比图像大一点,以便您可以在它们之外绘制选择手柄。

这一切都假设您永远不想做更复杂的绘图。

于 2012-05-21T15:06:24.527 回答