iOS实战:图形图像、动画和多媒体卷(Swift版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-14 06:58:27

点击下载

作者:关东升

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

iOS实战:图形图像、动画和多媒体卷(Swift版)

iOS实战:图形图像、动画和多媒体卷(Swift版)试读:

前言

PREFACE

在iOS应用开发中,图形图像、动画和多媒体编程技术的应用是非常多的。因此,本书将向读者全面介绍iOS图形图像、动画和多媒体编程等开发技术细节。由于苹果公司推出了iOS开发的新语言一Swift;而我们智捷课堂团队之前编写的一系列iOS经典图书,也都需要升级为Swift语言版本以满足开发者需求,基于这样的背景,我们智捷课堂与清华大学出版社联合策划了5本有关iOS开发的图书:

● 《iOS实战:入门与提高卷(Swift版)》

● 《iOS实战:图形图像、动画与多媒体卷(Swift版)》

● 《iOS实战:传感器卷(Swift版)》

● 《iOS实战:AppleWatch卷(Swift版)》

● 《iOS实战:苹果“生态圈”编程卷(Swift版)》

关于“iOS实战”系列图书的具体进展,请读者关注智捷iOS课堂官方网站http://www.51work6.com。

本书网站

为了更好地为广大读者提供服务,我们专门为本书建立了一个网站http://www.51work6.com/ios3.php,读者可以查看相关出版进度,并对书中内容发表评论,提出宝贵意见。

源代码

书中提供了100多个完整的项目案例源代码,全部采用最新的iOS 8 API. Swift1.2和操作界面,读者可以到本书网站http://www.51work6.com/ios3.php下载。

勘误与支持

我们在本书网站http://www.51work6.com/ios3.php中建立了一个勘误专区,及时地把新发现的书中的错误、纰漏及其修正方案反馈给广大读者。如果读者在学习过程中,发现了什么问题,可以在网上留言,也可以发送电子邮件到eorient@sina.com,我们会在第一时间回复您。读者也可以在新浪微博(@tony_关东升)中与我们联系。

本书主要由关东升执笔撰写。此外,智捷课堂团队的贾云龙、赵大羽、李玉超、关珊、赵志荣和李政刚也参与了部分内容的编写工作。感谢清华大学出版社的盛东亮编辑给我们提供了宝贵的意见。感谢赵大羽老师手绘了书中全部草图,并从专业的角度修改书中图片,力求更加真实完美地呈现给广大读者。感谢我的家人对我的理解和支持,使我能投入全部精力,专心编写此书。

由于时间仓促,书中难免存在不妥之处,请读者谅解并提出宝贵意见。关东升2015年5月于北京第1章 准备开始

在移动应用开发中,图形图像、动画和多媒体编程技术方面的应用也是非常多的。在本书中将介绍苹果有关iOS图形图像、动画和多媒体编程等开发技术。1.1 本书结构

本书将介绍苹果iOS图形图像、动画和多媒体编程等开发技术的相关知识,其中包括2D图形图像技术、图像处理、动画技术、音频、视频、访问iPod媒体库、流媒体技术、AirPlay与Apple TV开发等。

全书内容包括:(1)2D图形图像技术,其中包括UIKit绘图技术、绘制视图的路径、绘制图像和文本、坐标、Quartz坐标和坐标变换。(2)图像处理,其中包括创建图像对象、绘制图片、使用滤镜、人脸识别、微笑检测和二维码生成器技术。(3)动画技术,其中包括视图动画、Core Animation框架、视图动力学行为和动态效果等。(4)音频,其中包括音频文件简介、音频API简介、AVFoundation框架、System Sound API和OpenAL等。(5)访问iPod媒体库,其中包括访问iPod库相关API、访问与控制媒体库、媒体库搜索和媒体库选择器等。(6)视频,其中包括视频文件简介、使用MediaPlayer框架播放视频、使用AVFoundation框架播放视频、录制视频和编辑视频。(7)流媒体技术,其中包括网络多媒体技术、渐进式下载流媒体、实时流媒体、苹果流媒体协议HTTP Live Streaming、搭建HLS流媒体服务器、使用本地技术开发客户端和使用Hybrid技术开发客户端。(8)AirPlay技术,其中包括AirPlay技术简介、支持AirPlay的设备、多媒体文件支持、AirPlay开发视频播放、AirPlay开发音频播放和AirPlay开发UIWebView播放。(9)开发实战,本项目是为51CTO学院在线视频开发的iPad客户端的一个原型,其中使用到本书前面介绍的图形技术、动画技术、视频播放和流媒体等技术。此外,还介绍了如何搭建视频流媒体服务器。1.2 本书中的约定

为了方便使用本书,本节介绍本书中实例代码和图示的相关约定。1.2.1 实例代码约定

本书作为一种介绍编程方面的书,其中有很多实例代码。下载本书代码并解压代码,会看到图1-1所示的目录结构。图1-1 本书目录结构

目录ch02~ch10代表第2章~第10章的实例代码或一些资源文件,其中工程或工作空间的命名有如下几种形式:(1)二级目录标号,如2.2 StrokedFilledTriangle说明是第2章第1.2节中使用的StrokedFilledTriangle工程实例。(2)三级目录标号,如2.4.2 Quartz2UKit说明是第2章第2.4.2节中使用的Quartz2UKit工程实例。(3)没有标号情况下,由所在父目录说明是哪个章节的实例工程,如School说明是在第10章中使用的。1.2.2 图示约定

为了更形象有效地说明知识点或描述操作,本书添加了很多图示。下面对图示中的一些符号含义进行简要说明。

1. 图中的圈框

有时会看到图1-2所示的圈框,圈框中的内容是选中的内容或重点要说明的内容、需要引起注意的内容。图1-2 图中圈框

2. 图中的箭头

如图1-3~图1-5所示,箭头用于说明用户的动作,一般箭尾是动作开始的地方,箭头指向动作结束的地方。图1-3使用实线箭头表示选中控件修改属性。图1-4使用虚线箭头表示操作。图1-5所示箭头代表界面的跳转。图1-3 图中箭头1图1-4 图中箭头2图1-5 图中箭头31.2.3 图中手势

为了描述操作动作,在图中放置了等手势符号,这说明单击或操作了该处的按钮等控件,如图1-6所示。图1-6 图中手势

上述内容包含本书使用的大部分符号,一些个别符号会在使用的地方具体说明。1.2.4 方法命名约定

苹果在官方文档中采用Objective-C多重参数描述API,它将方法名按照参数的个数分成几个部分。

提示 关于Objective-C多重参数,下面的代码实现了在一个集合中按照索引插入元素。图1-7 Objective-C多重参数方法定义

苹果公司在推出Swift语言后,仍然采用多重参数描述API,如图1-8所示苹果API文档。图1-8 苹果API文档

图1-8所示是UITableView类的-numberOfRowsInSection:方法:,其中“-”表示实例方法,“+”表示静态方法,“:”表示有参数。该方法表示成为Swift语言是如下方法:

该方法表示成为Objective-C语言是如下方法:

为了统一命名我们也采用苹果官方的提法,即在本书中提到Swift方法时候也采用-numberOfRowsInSection:多重参数形式,特殊情况下我们会加以说明。1.2.5 构造器命名约定

构造器是特殊的方法,它也采用Objective-C多重参数描述API,但是更为特殊,例如:UITableView的构造器是“-initWithFrame:style:”,如图1-9所示。该构造器表示成为Swift语言形式如下:图1-9 苹果构造器API

该构造器表示成为Objective-C语言是如下方法:

为了统一命名我们也采用苹果官方的提法,即在本书中提到Swift构造器时候也采用-initWithFrame:style:多重参数形式,特殊情况下我们会加以说明。第2章 UIKit与Quartz 2D绘图技术

在iOS中绘图技术主要有UIKit、Quartz 2D、Core Animation和OpenGL ES。其中Core Animation提供动画实现技术,将在下一章介绍Core Animation,OpenGL ES是OpenGL针对嵌入式设备的简化版本,它可以绘制高性能的2D和3D图形。本章重点介绍UIKit和Quartz 2D。(1)UIKit。它是高级别的图形接口,它的API都是基于Objective-C和Swift。它能够访问绘图、动画、字体、图片等内容。(2)Quartz 2D。它是iOS和Mac OS X环境下的2D绘图引擎。涉及内容包括基于路径的绘图、透明度绘图、遮盖、阴影、透明层、颜色管理、防锯齿渲染、生成PDF,以及PDF元数据相关处理。Quartz 2D也被称为Core Graphics,缩写前缀为CG。Quartz 2D与Quartz Compositor统称为Quartz,Quartz原本是Mac OS X的Darwin核心之上的绘图技术。它的API接口都是基于C的。2.1 绘制视图

在iOS上无论采用哪种绘图技术(UIKit、Quartz 2D、Core Animation和OpenGL ES),都离不开UIView,绘制都发生在UIView对象的区域内。在绘制发生的时候如果使用的是系统提供的视图,绘制工作会自动得到处理。然而,如果是自定义视图,则必须重写drawRect:方法,在此提供相应的绘制代码。2.1.1 视图绘制周期

在iOS上绘制时比较麻烦,不会简单地调用一个方法就可以绘制出来了。而是首先为需要绘制的视图或视图的部分区域设置一个需要绘制的标志,在事件循环的每一轮中,绘图引擎会检查是否有需要更新的内容,如果有,就会调用视图的drawRect:方法进行绘制,因此需要绘制的视图中重写drawRect:方法。

一旦drawRect:方法被调用,就可以使用任何的UIKit、Quartz 2D,OpenGL ES等技术对视图的内容进行绘制。

绘图过程中除了使用drawRect:方法,还有setNeedsDisplay和setNeedsDisplaylnRect:。setNeedsDisplay和setNeedsDisplaylnRect:方法是设置视图或者视图部分区域是否需要重写绘制,setNeedsDisplay是重新绘制整个视图,setNeedsDisplayInRect:是重新绘制视图的部分区域。原则上尽量不要绘制视图的全部,以减少绘制带来开销。触发视图重新绘制的动作有如下几种:(1)当遮挡你的视图的其他视图被移动或删除操作时。(2)将视图的hidden属性声明设置为false,使其从隐藏状态变为可见。(3)将视图滚出屏幕,然后再重新回到屏幕上。(4)显式调用视图的setNeedsDisplay或者setNeedsDisplayInRect:方法。2.1.2 实例:填充矩形

下面通过一个简单实例了解一下视图绘制的过程。实例如图2-1所示,在整个视图中填充褐色。图2-1 实例:填充矩形

实现过程的具体步骤是,首先创建一个FillingRect工程,本书采用Xcode 6工具,启动Xcode,选择File New Project命令,在打开的Choose a template for your new project对话框中,选择Single View Application工程模板,如图2-2所示。图2-2 选择工程模板

单击Next按钮,随即出现图2-3所示的对话框。在Product Name文本框中输入FillingRect作为工程名,在Language列表框中选择Swift,其他项目采用默认值就可以了。设置完相关的工程选项后,单击Next按钮,选择保存工程目录后创建工程。图2-3 新工程中的选项

创建完工程后,需要添加一个自定义的视图类,选择New File命令弹出选择创建文件模板对话框,选择iOS→Source→Cocoa Touch class,出现如图2-4所示的对话框,在Class文本框中输入FillingView,在Subclass of列表框中选择UIView,在Language列表框中选择Swift,然后单击Next按钮创建自定义视图。图2-4 创建视图类

创建完成之后,FillingView. swift文件代码如下所示:

其中,drawRect:方法是被注释掉的,需要重写这个方法,在这里编写视图填充代码。修改该方法内容如下所示:

这两条语句都是UIKit提供的,其中UIColor. brownColor(). setFil()语句是为当前的图形上下文设置要填充的颜色。函数UIRectFill(rect)是按照刚才设置的颜色填充矩形。

代码部分就这么多,应用要想运行还需要将根视图控制器中的默认视图(UIView)修改成为自定义的视图(FillingView)。打开主故事板文件Main. storyboard,选择View对象,打开标识检查器,如图2-5所示,在Custom Class中选择Class为Filling View。图2-5 选择自定义视图

设计完成最后就可以运行一下看看效果,从整个设计过程看主要的工作是在重写drawRect:方法。2.1.3 填充与描边

UIKit提供非常基本的绘图功能,主要的API有:(1)UIRectFill(CGRect rect)。填充矩形函数,前面的例子介绍过。(2)UIRectFrame(CGRect rect)。矩形描边函数。(3)UIBezierPath。绘制常见路径类,包括线段、弧线、矩形、圆角矩形和椭圆的方法。

UIKit虽然提供了UIBezierPath等类,但是对于线段、渐变、阴影、反锯齿等高级特性支持还是不及Quartz 2D。

下面看看UIRectFrame(CGRect rect)函数的使用。修改FillingView视图的drawRect:方法如下所示:

代码第①~②行是在视图上绘制一个红色的矩形边框,绘制边框过程被称为描边(Stroke),其中UIColor. whiteColor(). setStroke()是设置图形上下文白色描边,如图2-6所示。图2-6 矩形描边2.1.4 绘制图像和文本

除了可以绘制几何图形外,也可以绘制文本和图像。这就像是使用Interface Builder工具从对象库中拖曳出来的标准控件(UILabel和UIImageView)—样。这些绘制可以使用UIImage和NSString实现。UIImage类中绘制图像主要的方法如下:(1)-drawAtPoint:。设置绘制指定点,如图2-7(a)所示。(2)-drawInRect:。图片绘制在指定的矩形里,如图2-7(b)所示。(3)-drawAsPatternInRect:。在指定的矩形里平铺绘制图片,如果图片大小超出了指定的矩形,形式上与-drawAtPoint:方法类似,如果图片大小小于指定的矩形,如图2-7(c)所示,就会有平铺的效果。图2-7 绘制方法

在UIKit框架中提供了一个NSString类的扩展UIStringDrawing,它提供了绘制文本主要的方法:(1)- drawAtPoint:withAttributes:。文本在指定点绘制。(2)- drawInRect:withAttributes:。文本在指定的矩形里绘制。

下面通过一个实例介绍一下图像和文本的绘制。实例界面如图2-7(b)所示,从界面中看到的图片和文字都不是使用标准控件设计出来的,而是通过绘制方法绘制出来的。

请参考2.1.2节构建工程ImageString。自定义视图类MyView. swift代码如下所示:

本例中第①行代码使用myImageObj?. drawInRect(CGRectMake(0,40,320,400))语句把图片放在矩形中显示,由于矩形高宽比例与图片的原始比例不一样,导致图片变形,这是使用drawInRect:方法进行绘制图片时需要注意的事情。

代码第②、③行设置一个字体属性,第④行代码是绘制字符串。一般而言,不需要使用这种方式绘制字符串,而是使用UILabel控件。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载