CodeV

1.4-使用UIKit建立上下文

UIKit为构建上下文提供了友好的入口点。最简单的图像绘制模式如清单1-1所示。 这只涉及到启动一个新的上下文(你指定上下文的大小),绘制它,检索新的图像和结束上下文。此模式以基本的1:1的比例生成图像,其中每个绘图操作对应于位图上下文中的精确像素。

清单1-1 使用UIKit创建一个基本的位图上下文

1
2
3
4
5
6
UIGraphicsBeginImageContext(size);

// Perform drawing here

UIImage *image=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Device Scale

清单1-2显示了一个相对复杂(并且推荐使用)的入口点。它使您能够构建符合设备比例的图像。这里用于创建位图上下文的选项与变量指定为绘制的图像的比例。Scale是指逻辑空间(以点为单位)和物理显示(以像素为单位)之间的关系。

以scale为2创建的图像生成的是视网膜图形。像素范围在每个方向上加倍,产生的图像与以1的基础比例绘制的图像相比存储了四倍的数据。不透明度参数允许您忽略Alpha通道来优化位图存储。每个像素只需要3个字节,相对来说带有Alpha通道的每个像素需要4个字节存储。

清单1-2通过设置上下文选项的设备比例绘图

1
2
3
4
5
UIGraphicsBeginImageContextWithOptions(
targetSize, isOpaque, deviceScale);

// Perform drawing here

UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();

我强烈建议您在您的应用程序中使用列表1-2中所示的方法来绘图。 例如,在绘制UIImageView的图像时,始终使用带选项(带有可设置参数)的方法。

创建PDF上下文

使用PDF上下文创建时,您必须绘制到一个文件路径或一个将它提供给数据使用者的可变数据对象。清单1-3显示了前者的一个示例。 提供了一个边界矩形(对于A大小的页面传入CGRectZero)和一个字典,您可以在其中指定新文档的元数据和安全信息。例如,您可以指定作者,所有者和用户密码,打印和复制权限,关键字等等。

与位图上下文一样,Core Graphics的实现(具体来说就是CGPDFContext)所需时间长于UIKit的等效实现所需时间。如果你想深入了解基于C的类和函数,你会发现另一个PDF生成的方法。

清单1-3绘制图像到一个PDF文件中

1
2
3
4
5
UIGraphicsBeginPDFContextToFile(pathToFile, theBounds, documentInfo);
UIGraphicsBeginPDFPage();

// Perform drawing here

UIGraphicsEndPDFContext();

通过调用UIGraphicsBeginPDFPage()开始每一页的绘制。这将在文档中创建一个新页面供你写入。当你完成创建输出时,你不必显式地结束每个页面,但你必须就像结束任何其他上下文一样结束PDF上下文。


本文翻译自《iOS Drawing Practical UIKit Solutions》作者:Erica Sadun,翻译:Cheng Dong。如果觉得本书不错请购买支持正版:亚马逊购买传送门,本书所有源代码可在GitHub上下载。译者虽然力求做到信,达,雅,但是由于时间仓促加之译者水平十分有限,文中难免会出现不正确,不准确,词不达意,难于理解的地方,还望各位批评指正,共同进步,谢谢。转载请注明出处。