在WYSIWYG Mac应用程序中布局图像的最佳实践?

时间:2012-05-16 15:34:14

标签: macos cocoa printing core-graphics quartz-2d

我处于Mac应用程序的概念阶段,应该让用户轻松选择和布局图像进行打印。它是一个基于文档的应用程序,文档可以有多个页面,其中包含大量不同大小和轮换的图片。用户界面有点像Pages.app的用户界面。

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

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

我知道有几种不同的方式来完成我想做的事情,即:

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

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

  3. 最佳做法是什么?使用核心图形绘图还是使用NSView?为什么呢?

    非常感谢你!

    • 约翰内斯

3 个答案:

答案 0 :(得分:2)

取决于这些网页应该如何互动。如果有很多鼠标互动,例如拖动,选择等我会继续观看。如果你想要流畅的动画,我甚至会使用简单的CALayers将其内容设置为一个图像。这也可以让你在重叠的情况下对图像进行zPosition。基于视图的解决方案使z排序变得困难。 drawRect方法应该是最快的,但是你很难集成用户交互,你必须手动z-order。

答案 1 :(得分:2)

这是我打开两个Apple技术支持事件中的一个回复:

  

约翰内斯,

     

感谢您就Apple打印问题与Apple DTS联系   以及构建应用程序通用UI的不同方法(使用   视图)。

     

在OS X中使用层支持视图的趋势(利用   核心动画层)这是由容易的能力激发的   动画您的应用程序的用户界面,几乎没有工作,何时   需要。但是在打印方面,你会更好   为自定义视图实现drawRect,以便视图内容可以   在渲染到上下文中时以“完整分辨率”绘制   印刷。

     

如果您使用图层支持的视图作为这些图层   “renderInContext”图层内容将用于渲染,其中   通常不会设置为源的完整分辨率   文件/图像。这是因为图层支持的视图需要额外的   用于存储这些位图(缓存层内容)的内存,以及因为   因此,建议为屏幕选择合适的尺寸   (对于印刷品而言,其尺寸可能不一定合适   页)。

     

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

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

答案 2 :(得分:1)

这三种方法都应该有效。既然你应该使用大型图像的缩小表示,我认为不会有太大的区别。做你觉得最舒服的事情。

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

这是假设你从不想要做更复杂的绘画。