IOS 深入学习(31)之About Drawing and Printing in iOS(绘图跟打印)
1 前言
从本节开始我们开始学习绘图相应技术,本节主要简单的介绍了IOS中的绘图和打印技术,用到的技术和如何进行。
转载请注明出处:http://blog.****.net/developer_zhang
2 详述
本覆盖了三个主题“
·绘制自定义的UI视图。自定义UI视图允许你来绘制不能够简单的使用标准UI元素的文本内容。例如:一个绘图程序可能使用一个用户绘制的自定义视图,或者一个游乐场游戏可能使用一个用户自定义视图到绘制的精灵里。
·绘图到后台位图和PDF内容中。是否我们打算晚些显示图片,导出他们到一个文件,或者打印图片到一个无线打印机中,后台绘图让我们在不打断用户工作流程的情况下这么做。
·添加无线打印支持到我们的应用中。IOS打印系统使我们绘制我们的内容各自不同的适应页面。
如下图中中,我们结合用户视图和标准视图,设置在后台绘制一些东西。
2.1 简介
IOS本地绘图系统结合了三个主要技术:UIKit,Core Graphics,和Core Animation。UIKit提供了视图和一些额外(低等级)的使用UIKit视图来支持的绘图,Core Animation 提供了请求转化和动画UIKit视图的能力。Core Animation 也负责整合视图。
2.2 自定义UI视图允许更复杂的绘图
本文描述了如何使用本地绘图技术来绘制自定义视图。这些技术,包括了Core Graphics和UIKit框架,支持2D绘图。
在我们考虑使用自定义视图前,我们应该确定我们真正需要这么做。本地绘图适合处理更复杂的2D布局需要。然而,因为自定义视图是加强处理的,我们应该限制使用本地视图技术绘制的数量。
作为一个可选择的自定义绘图,IOS app 能够以其他的方式在屏幕上绘制。
·使用标准(内建)视图:标准视图让我们绘制普通的原始的用户界面,包括数组,集合,弹出框,图像,进度条,列表等等不需要我们明确绘制东西的。使用内建视图不仅仅能够保证在IOS app中始终如一的用户体验,而且能够保存我们编程精力。如果内建视图符合我们的需求,我们应当参照官方文档View Programming Guide for IOS。
·使用Core Animation layers:核心动画让我们使用动画和旋转创建复合的,分层的2D视图。Core Animation是一个动画的很好选择,或者以复杂的方式来表示层次感来结合视图,并且能够在文档描述中结合使用自定义绘制视图。我们可以参考Core Animation Overview文档来学习更多的Core Animation。
·在GLKit 视图或者自定义视图中使用OpenGL ES。OpenGL ES框架提供了一个开源的标准的主要对于需要高比率的游戏开发或者app的锯齿视图库集合。例如虚拟标准应用和基于力学的,建筑学设计的app。它复合OpenGL ES 2.0和OpenGL ES v1.1标准。可以参考OpenGL ES Programming Guide for IOS。
·使用web内容。UIWebView类让我们在IOS app中展示基于web的用户界面。为了学习更多的关于在web视图中显示web内容,请参考Using UIWebView to display select document types and UIWebView Class Refrence。
根据我们创建的app类型,可能很少使用自定义绘图代码。尽管沉浸式应用典型的扩展了自定义视图代码的使用,实用和效率类的应用常常使用标准视图和控制器来显示内容。
自定义挥着代码的使用被限制于我们显示动态变化的需求的情况下。例如:一个绘制的app典型的需要使用自定义绘制代码来追踪用户的绘图命令,游戏可能需要不断更新屏幕来反映游戏环境的变化。在这些情形,我们应该使用适当的技术和创建一个自定义视图类来处理时间并且是当地更新显示。
另一方面,如果我们的大部分app界面被确定,我们能够以一个图片或者多个图片文件来作为背景并且在运行期使用UIImageView来显示这些图片。我们能够按照我们界面构建的需要通过他们的内容来层化这些image视图。我们也能够使用UILabel类来显示配置内容和包含按钮或者其他控制器来提供交互操作。例如:一个电子画板游戏就很少使用自定义绘图代码。
因为自定义视图一般是更难处理(GPU很难提供支持),如果我们能够使用标准视图做我们想做的事情,我们应尽可能的来这么做。并且我们应该使我们的自定义的视图尽可能的小,仅仅包含我们不能用其他方式绘制的内容,尽量使用标准视图。如果我们需要结合一个标准的自定义绘制的UI元素,考虑使用Core Animation的标准视图的图层来添加自定义视图以便我们能够少用绘图方法。
2.3 少量的本地绘图技术概念
当我们使用UIKit和Core Graphics绘制文本,我们应该知道一些除了绘图循环之外的概念。
·drawRect:方法,UIKit类创建了一个绘图内容来显示。视图内容包含了绘制系统需要执行绘图命令的信息,包含填充和画笔颜色,字体,剪辑区域,画笔的粗细等属性。我们也能够创建和绘制自定义内容到位图图像和PDF内容中。
·UIKit有一个绘图原点在左上角的默认的坐标系;沿着右侧和下方的是正值。我们能够改变大小,方向,和有关到下面视图或者窗口的默认坐标系统的位置,通过修改当前的变化矩阵,能够映射一个视图的坐标空间到设备屏幕上。
·在IOS中,逻辑坐标空间,以点来计算距离,不等同于设备坐标空间的像素。由于高精度,点以浮点值来表示。
2.4 UIKit,Core Graphics和Core Animation给我们的App很多绘图工具
UIKit和Core Graphics有很多补充的包含图像内容的图像处理能力,贝塞尔曲线,图像,位图,透明图层,颜色,字体,PDF内容,绘制矩形和边框区域。此外,Core Graphics有关于线条属性,颜色空间,颜色模式,梯度,阴影和图像遮罩效果等函数。Core Animation以其它的技术通过操纵和显示内容能够使我们创建流畅的动画效果。
2.5 App能够后台绘制位图和PDF
常常用于app的后台绘制技术:
·后台位图环境常常当缩小照片上传时候使用,显示内容到一个image图片中来存储,或者使用Core Graphics来生成复杂的图像来显示。
·后台PDF环境常常当绘制用户生成打印内容时候被使用。
在我们创建后台环境之后,我们能够绘制它当我们使用一个自定义视图的drawRect:方法时候。
2.6 App有对于打印的选择范围
在IOS4.2中,app能够无线打印内容来使用AirPrint支持打印。当装载打印任务时候,他们常常有三种方式提供UIKit内容来打印:
·他们给予框架一个或者多个可以直接打印对象;例如需要最小app关联的对象。这些NSData,NSURL,UIImage或者ALAsset类的实例包含或者涉及图像数据或者PDF内容。
·他们能够分派打印格式给打印工作。一个打印格式是一个能够通过符合界面的布局确定类型的对象。
·他们能够分派一个界面给打印工作。界面渲染常常是一个UIPrintPageRender的绘制部分或者全部内容到自定义子类的实例。页面渲染能够使用一个或者多个打印格式来帮助绘制和格式化它的打印内容。
2.7 高分辨率支持很容易
有些IOS设备支持高分辨率屏幕,因此我们app必须准备运行在这些设备和低分辨率设备商。IOS处理大部分的需要处理不同情况下的工作,但是我们app也必须做余下的工作。我们的任务是包含提供特殊名字的高分辨率图像和修改我们的图层,图像关联代码来添加规模要素。
3 结语
以上是所有内容,希望对大家有所帮助。