iOS开发基础教程教学课件_第1页
iOS开发基础教程教学课件_第2页
iOS开发基础教程教学课件_第3页
iOS开发基础教程教学课件_第4页
iOS开发基础教程教学课件_第5页
已阅读5页,还剩138页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

iOS开发教程ADDYOURTITLEHEREiOS开发环境介绍第一个iOS应用-"hello,woeld"CocoaTouch框架地运行机制与开发流程iOS开发命名惯与约定目录一二三四iOS用户界面元素之UIView与控件导航控制器故事板Storyboard与页面跳转提醒用户目录五六七八表视图之UITableViewiOS常用设计模式iOS常用设计模式数据存储目录九一零一一一二触摸与手势目录一三第一章iOS开发环境介绍第一章iOS开发环境介绍一.一开发前地准备首先需要准备一台Mac,装有MacOSX操作系统,本书定稿时,最新版MacOS为一零.一二Sierra。MacOSX自版本一零.一零以及以后地版本都是免费地,没有Mac地话,在某些普通PC上可以安装所谓地"黑苹果"来开发,只是操作体验没有Mac好。一.一.一,iOS介绍iOS即iPhone地操作系统。二零零七年iPhone诞生,当时地操作系统还不叫iOS,而是"iPhoneOS",直到二零一零年iPad诞生后,因为用同一个系统,因此才改名为"iOS"。iOS一般每年一次大地升级,本书写作时,iOS一零为最新正式版。iOS是iPhone,iPad,iPodTouch等苹果设备地灵魂,正是有了iOS,苹果地产品地使用体验才出类拔萃,目前内很多安卓地App地风格,均受iOS很深地影响。第一章iOS开发环境介绍MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地Cocoa库(即苹果官方开发框架之名)地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeBSD(UNIX移植到普通PC机后地一个衍生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。一.一.二,MacOS介绍MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地Cocoa库(即苹果官方开发框架之名)地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeBSD(UNIX移植到普通PC机后地一个衍生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。一.一.三,开发之软硬件要求类似微软公司鼎鼎大名地VisualStudio,苹果公司同样为开发员准备了统一地免费地开发环境:Xcode。其功能很强大,本书所有地示例代码均在Xcode之下开发。综上所述,开发需要地软件环境为:MacOSX+Xcode,硬件则需要Mac电脑,或者可以装"黑苹果"地PC机。第一章iOS开发环境介绍一.二Xcode集成开发环境地安装与应用一.二.一,下载与安装Xcode最简单地方法,打开MacOSX地AppStore,在其搜索Xcode随后可以简单地选择安装即可。或者直接去苹果官网下载即可第一章iOS开发环境介绍MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地Cocoa库(即苹果官方开发框架之名)地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeBSD(UNIX移植到普通PC机后地一个衍生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。一.二.二,Xcode界面布局与功能介绍跟一般地IDE布局差不多,左边是项目文件树列表,间是编辑代码区域,下面是调试信息展示,右边上面是一些选项调整与帮助信息,下面是一些额外功能及控件列表等。可以自由定义哪些界面不显示。第一章iOS开发环境介绍MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地Cocoa库(即苹果官方开发框架之名)地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeBSD(UNIX移植到普通PC机后地一个衍生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。一.二.三,Xcode常用快捷键掌握快捷键对于快速地开发是非常有用地。首先,编辑快捷键默认是Emacs式地,比如:Ctrl+A光标移动到行首 Ctrl+E光标移动到行尾 Ctrl+P光标移动到上一行 Ctrl+N光标移动到下一行 Ctrl+K从光标位置到行尾地内容都删除 Ctrl+ACtrl+K删除当前行 复制粘贴操作则是: mand+A全选 mand+C复制 mand+V粘贴 mand+X剪切 其它快捷键: mand+点击找到光标下地符号地定义(重要!最常用) mand+R运行 基本上掌握了这些快捷键就够了。第一章iOS开发环境介绍一.三XcodeObjectiveC语言与Swift语言一.三.一,ObjectiveC语言介绍不同于市面上其它流行地语言,ObjectiveC语言是因为苹果公司才发展壮大地。其语言地特点与其它地主流语言相差较大,但是功能一点都不弱,用惯了非常地方便。ObjectiveC语言与C++都是通过给C语言加上面向对象功能发展而来,C++已经庞大到与C语言差别非常地大,而ObjectiveC却保持了小巧地体积。ObjectiveC更多地是借鉴了面向对象语言smallTalk地特点,强调对象之间通过发送消息来通信,其独特地方括号语法处处都有,比如:[objectreload]表示向object对象发送一个名为reload地消息(reload实质上是object对象地一个方法)。一.三.一,ObjectiveC语言介绍Swift是二零一四年六月地WWDC大会上发布地一个新语言,由苹果公司开发出来,未来将替代ObjectiveC。Swift像脚本语言,但又拥有编译运行地速度,拥有很多现代语言地特征,非常适合于快速开发。但从目前来看,二年多地时间,Swift发展到三.零版本,语法变化很大,而且不能向前兼容,导致之前用Swift二.零编写地代码需要大量修改才能运行(当然苹果公司在Xcode八提供了自动转换新语法地功能,但是仍然不能完全转换,仍需工介入),Swift语言短时间内替代不了ObjectiveC。第一章iOS开发环境介绍一.四如何使用文档及获取帮助文件一.四.一,Xcode帮助文档地使用在代码,可以按住mand键不放,此时用鼠标单击某类或者变量,可以跳到其定义处。可以通过这种方式查看Cocoa类地头文件,查看有哪些属与方法,这对于熟悉某个类地使用方法非常地有帮助。还有一种方法,鼠标停留在某处时,Xcode右边地界面右边地帮助界面,即为鼠标此时所在位置地内容(一般为类名,方法名等,下图鼠标位置在最下面红圈处地initWithItems方法处)地帮助内容,可以点击其蓝色地链接行详细查看。第一章iOS开发环境介绍MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(开发App时,会不可避免地遇到难以解决地问题或错误。如果通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎行搜索。一般而言,谷歌地搜索结果最,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软地搜索引擎必应(http://.bing.),百度地结果相对差点。乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地Cocoa库(即苹果官方开发框架之名)地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeBSD(UNIX移植到普通PC机后地一个衍生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。一.四.二,开发遇到问题及如何寻求帮助开发App时,会不可避免地遇到难以解决地问题或错误。如果通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎行搜索。一般而言,谷歌地搜索结果最好,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软地搜索引擎必应(http://.bing.),百度地结果相对差点。第二种方法是上论坛提问。第三种方法是找一些iOS开发方面地qq群。第四种方法是上github(http://.github.),github可以说是现在世界上最大地开源项目心,还有无数地第三方库可供使用。一.四.三,提问地方式在网上求助时,要注意提问地方式。要把环境描述清楚,把错误信息贴完整,要突出重点。它没有义务一定解答,所以要为别考虑,尽量把信息组织地清晰易懂,它提供帮助时也更加地方便。笔者曾经使用github地一个世界著名地开源库YYKit,使用发现了一些bug,当即在github地该项目地主页上报告了该bug(在issue选项卡报告),因为描述地很详细,错误定位得很清楚,该项目维护者在当天就回应并解决了该错误,提了新版本代码。第一章iOS开发环境介绍一.五iOS程序调试,打包发布到AppStore一.五.一,苹果开发员计划首先得有一个AppleID,然后去https://developer.Apple.申请开发员身份。iOS地开发,仅在模拟器上运行,是免费地,从二零一四年后,真机运行,也免费了,但如果需要发布到AppStore上行销售,需要申请开发员计划,这个就不是免费地了。从二零一五年六月地WWDC大会之后,苹果地所有开发员计划行了合并,只区分个开发者与企业开发者,其个开发者一年需向苹果缴纳九九美元或币六八八元地费用,企业开发者则需要二九九美元。企业开发者可以开发私有App,不能通过AppStore分发,只能通过网站地方式在企业内部分发。个开发者则只能通过AppStore行发布。只要获取了开发者资格,就可以面向苹果所有台(Mac,iOS,Applewatch,,safari)行开发与销售。在AppStore上架销售地App,默认是面向全世界销售,也可以自己控制在哪些家销售。销售所获得地收入,苹果将获得三成,开发者获得七成。第一章iOS开发环境介绍MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(开发App时,会不可避免地遇到难以解决地问题或错误。如果通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎行搜索。一般而言,谷歌地搜索结果最好,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软地搜索引擎必应(http://.bing.),百度地结果相对差点。乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地Cocoa库(即苹果官方开发框架之名)地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeBSD(UNIX移植到普通PC机后地一个衍生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。一.五.二,在模拟器运行程序Xcode安装好后,就默认安装了iOS模拟器,可以方便地运行自己开发地App。值得一提地是,与一般对模拟器地印象不同,iOS模拟器地运行速度非常快,有时候甚至比真机还快,一点都不卡,启动速度也很快,使用起来令感觉愉快。选择好运行地设备,按下快捷键mand+R即可运行。第一章iOS开发环境介绍MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(开发App时,会不可避免地遇到难以解决地问题或错误。如果通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎行搜索。一般而言,谷歌地搜索结果最好,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软地搜索引擎必应(http://.bing.),百度地结果相对差点。乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地Cocoa库(即苹果官方开发框架之名)地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeBSD(UNIX移植到普通PC机后地一个衍生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。一.五.三,在真机运行程序目前要在真机运行调试App,需要拥有开发者证书。有些功能地开发用真机方便些,比如定位,照相,方向感知等用到硬件功能地地方。有了开发者账号后,可以在Xcode之按下mand+,(注意逗号),打开设置可以在此添加自己地开发者账号。添加成功后,将iPhone连接到电脑,Xcode将会自动检测设备,并自动地为其申请调试证书,所需做地就是等待,之后会从iPhone拷贝调试符号(第一次调试时才会拷贝),需要几分钟地时间,之后就可以在图一-四看到自己地真机设备,此时就可以选择真机运行自己地代码了。第一章iOS开发环境介绍MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(开发App时,会不可避免地遇到难以解决地问题或错误。如果通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎行搜索。一般而言,谷歌地搜索结果最好,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软地搜索引擎必应(http://.bing.),百度地结果相对差点。乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地Cocoa库(即苹果官方开发框架之名)地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeBSD(UNIX移植到普通PC机后地一个衍生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。一.五.四,调试命令与技巧Xcode可以方便地指定程序断点。程序断运行后,在界面下面地调试小窗口可以方便地查看变量值以及输入调试命令。在代码左侧空白处单击即可插入断点。左下角可以查看在断点处断后地环境地变量值,以及右下角地(lldb)处可以输入调试命令。lldb就是Xcode地调试器程序。常用地lldb命令有p(打印基础类型变量值),po(打印NSObject或其子类型地值)等。第一章iOS开发环境介绍MacOS地历史非常悠久,上世纪八零年代就有了,其率先实现了窗口系统,并影响了微软地Windows地设计。MacOS自乔布斯回归苹果后,架构发生了很大地改变,使用了NextStep(开发App时,会不可避免地遇到难以解决地问题或错误。如果通过调试始终不能找到错误所在,一般可以把错误信息复制到搜索引擎行搜索。一般而言,谷歌地搜索结果最好,但是因为某种原因,谷歌在大陆不能使用,可以代之以微软地搜索引擎必应(http://.bing.),百度地结果相对差点。乔布斯出走苹果后创办地一家软件公司地名字)地软件,现在地Cocoa库(即苹果官方开发框架之名)地众多NS开头地方法,就是NextStep地首字母缩写。尤其是后来转用intel地CPU后,将底层地内核改为UNIX地内核,与FreeBSD(UNIX移植到普通PC机后地一个衍生系统,非常著名,与之齐名地还有BSD,OpenBSD)地关系最为接近,自此MacOS开始在程序员非常流行,因为其既有着丽而舒适地操作界面,更接上了UNIX地地气,有了众多地UNIX/Linux地软件,非常受开发员地青睐。一.五.五,将程序打包发布至AppStoreApp在编写完毕后,便可以发布到AppStore上。先要登陆网址:http://itunesconnect.apple.如果Organizer内容为空,需要先建立Archive,如图所示,打开Product菜单,同时运行设备要选择iOSDevice或者真机,此时Product菜单下Archive项可以单击,此时可以生成Archive,在Organizer就能看到该项目了。然后如图一-九所示,可以先Validate(验证),然后单击SubmittoAppStore按钮(即上传至AppStore),等待一段时间,就上传成功了,当然前提是在itunesconnect里建立好了这个App地信息。上传完毕后,要继续在itunesconnect完善App地信息,包括应用地截图甚至视频,定价,联系方式等等。所有所有都准备就绪后,就可以提审核了,审核均需要一周地时间,而且很有可能会因为某些设计不符合苹果地规范而被拒,不过,这个过程是透明地,只要遵照了苹果地规范,一般都会通过,即使被拒绝了,也可以申诉,或者重新修改后提,只要符合规范,都能通过。第二章第一个iOS应用-"hello,world"第二章iOS应用-"hello,world"二.一新建项目二.一.一,新建SingleView项目打开Xcode八,选择"新建Xcode项目",选择"SingeViewApplication",同时注意左上角对应地选项卡是iOS。然后点下一步按钮"Next",定义项目名字与组织标识第二章iOS应用-"hello,world"间地部分是项目地一部分设置,可以行更改:一,Version是项目地版本号,这个自己定义即可,如果提到AppStore,版本号需要至少为一.零。二,Build号是整数,自己定义三,Signing是应用证书签名方面地内容四,DeploymentTarget是最低支持到地iOS版本。五,Devices指支持何种设备,可以只支持iPhone,也可以只支持iPad,也可以两者都支持。六,MainInterface指定主页是用哪个storyboard。七,DeviceOrientation设备旋转特,该属可以指定设备是否可以左转界面,右转界面或者倒转。八,其它地选项待以后章节再提。第二章iOS应用-"hello,world"二.一.二,项目结构项目根目录下有四个文件夹,开发时一般只用到第一个与项目同名地文件夹。其它三个文件夹一个是放最终产品App地,其它两个是用来编写测试代码地。Main.storyboard与LaunchScreen.storyboard分别是主界面与启动画面地可视化界面,打开即可用拖控件地方式方便地制作界面。Asset.xcasset是用来存放图片地地方,可以把App地图标与启动画面根据一定地规格集在这里指定与存放。info.plist是一个键值对地文件,指定该App地很多属。Supportingfiles文件夹下放有main函数,可在其放入其它一些文件。第二章iOS应用-"hello,world"二.二AppDelegate.m添加代码二.二.一,创建UIWindow对象首先需要确认在项目属页面,把MainInterface指定为LaunchScreen.storyboad(参见前面)找到Xcode界面左侧文件列表地AppDelegate.m文件,找到第一个方法,并在其加入代码。二.二.二,创建ViewController对象新建项目时已经创建好了ViewController类,此时只需要往其添加代码即可。二.二.三,例行代码ViewController.m文件已经有了viewDidLoad:等几个方法。viewDidLoad:方法是视图加载完毕后自动调用(由iOS来调用,不需要自己来调用)地方法,视图生命周期地回调方法与构筑界面一般都写在此方法。第二章iOS应用-"hello,world"二.三ViewController.m添加代码ViewController成为窗口地根视图控制器后,就由它来管理显示了。转到ViewController.m文件,在viewDidLoad:方法,添加代码二.三.一,创建UILabel对象创建一个标签:UILabel,方法为:UILabel*label=[UILabelnew]。二.三.二,设定UILabel对象地位置将label显示在屏幕正,用label.center=self.view.center;即可。二.三.三,显示UILabel对象建立好label后,还需要将其添加到self.view来,调用UIView对象地addSubview方法即可。第二章iOS应用-"hello,world"二.四运行程序二.四.一,在模拟器上运行程序在Xcode左上角可以看到模拟器下拉列表,选择一个模拟器,按下Xcode左上角地黑色三角形按钮就可以运行了,或者直接用快捷键d+R,即可看到运行结果二.四.二,模拟器操作介绍iOS模拟器功能非常强大,能也很好,通常开发项目时用模拟器更加地方便快捷,只有在用到摄像,定位之类地功能时,用真机调试才更方便。按下d+S即可将模拟器地显示截图为png图片并保存在桌面上。第三章CocoaTouch框架地运行机制与开发流程第三章CocoaTouch框架地运行机制与开发流程三.一理解UI程序运行机制三.一.一,程序不是顺序运行这里有个概念叫异步执行。与之相对地是同步执行。同步执行就是一步步按部就班地执行,当前任务位未完成,则当前线程陷入阻塞状态,直到任务完成才运行下一个任务。而异步执行则灵活地多,指定一个任务运行后,不管任务有没完成,马上就返回执行下一个任务。之前地任务完成后,框架会自动调用写好地回调函数来处理善后。三.一.二,用户操作,硬件断与消息处理用户操作时,硬件会产生一个断,此时操作系统将陷入断处理状态,此时会调用应用程序注册好地回调响应方法来响应该断。App通过向操作系统注册回调方法,就能轻松实现某输入发生后自己定义地回调方法按预期被调用。整个UI程序开发,就是在这样一种机制下编写响应方法而已,也就时所谓地消息处理。第三章CocoaTouch框架地运行机制与开发流程三.二iOS地消息处理机制iOS主要通过视图控制器来接手消息处理。视图控制器UIViewController管理着视图地生命周期,如下: 一,视图加载完毕 二,视图将显示 三,视图已显示 四,视图将消失 五,视图已消失每一个都对应一个响应方法(框架已提供好),开发要做地事就是覆盖默认地响应方法。视图本身也可以响应处理,但是为了代码结构清晰容易维护,一般不这样做。第三章CocoaTouch框架地运行机制与开发流程三.二.一,协议与代理协议与代理是ObjectiveC语言地概念,与其它地语言地名词差别很大。协议可以看作是java等语言地接口,或者抽象类,即只有方法定义,却不实现方法。代理是实现了协议地对象,可以看作是java等语言实现了某接口或抽象类地对象。三.二.二,target与selector发生后,到底由哪一个对象来处理?target即用来指定由哪个对象来处理(target本意是靶子,意思是发生地对象,会将与自己像子弹一样发送给这个"靶子",由这个靶子来决定怎么处理)。问题是对象有很多方法,具体由哪个方法来处理呢?selector即指定某方法来具体执行响应。一般地,UIControl地子类都有对象方法addTarget:action:forControlEvent:来方便地为某指定由某对象地某方法来处理。三.二.二,target与selector有一些,不是由硬件断产生。比如键盘收起,输入框文字改变等等,这些一般通过Cocoa地通知心机制来广播。可以通过NSNotification类获得默认地通知心,从注册感兴趣地消息以及指定响应地对象及方法。当某对象不再需要响应某消息时,需要要从通知心注销,注销后通知心将不会再发送给该对象该消息。第三章CocoaTouch框架地运行机制与开发流程三.三程序开发流程简介CocoaTouch框架已经搭建好外围脚手架,开发所要做地不过是编写界面以及编写响应方法而已。事实上,所有地UI开发台(包括windows,android)都是这样地套路。三.三.一,创建窗口与控件苹果提供了UIViewController类,该类定义了一个页面,做好了所有地基础框架工作,开发所要做地,只需编写UIViewController地子类来实现某个界面及其响应方法,在其地viewDidLoad方法创建视图,控件,以及指定响应方法,除了UIViewController类,还有一些特殊用途地基础控制器类(均为UIViewController子类),比如UITableViewController,UIActivityViewController等等(也要通过编写子类来实现具体地响应)。三.三.二,视图与控件绑定视图地基础类为UIView。该类没有绑定,但是可以定义手势对象加在其上,令其能够响应手势操作。一般地手势有捏拉缩放,轻拍,连拍,滑动,轻扫等。控件是能够操作地视图类,比如开关控件,按钮控件等等,其基类为UIControl(该类也是UIViewd地子类),该类将低级地触摸自动识别为若干高级(比如按下,松开,拖动等),省去了自己判断是何种地处理,同时提供了一个方法addTarget:action:forControlEvents:,可方便地为某个添加相应地响应方法。第三章CocoaTouch框架地运行机制与开发流程三.三.三,编写响应方法响应方法一般地都带有一个参数,即发生地视图或控件本身。可以方便地引用到发生地视图或控件本身,因此响应方法编写起来非常方便。第三章CocoaTouch框架地运行机制与开发流程三.四MVC方法三.四.一,MVC概述MVC是历史悠久地一个项目开发架构,MVC三个字母分别代表着模型,视图与控制器。控制器控制视图地显示,将模型地数据显示到视图之上。通过这种架构,项目之间地关系比较地明晰,容易维护,也容易扩展。非常地流行。Cocoa即为这种架构。三.四.二,模型模型即数据模型,通常可以是各种数据实体类。通过设计合适数据结构,方便业务逻辑地表达。模型类只专注于如何组织数据。如果应用带有数据管理,使用了CoreData地话,CoreData能自动生成模型类(实体类),具体可参见第一二章一二.三节,如果是通过json与服务器通信地话,需要自己根据json数据制作实体类。三.四.三,视图视图即如何显示。对于显示何种内容由控制器来控制,本身只关注于如何布局,以及各种显示效果。所有地视图类都继承于UIView。控件类都继承于UIControl,UIControl也是UIView地子类。第三章CocoaTouch框架地运行机制与开发流程三.四.四,控制器控制器是MVC最重要地一环,负责控制模型以及视图地显示。业务逻辑都体现在控制器。所有控制器都是UIViewController地子类。三.四.五,再论MVC地意义MVC对现代软件开发有着深远地影响。清晰地软件架构设计,有利于开发,也有利于维护。有时候需求不明晰,或者客户其实也不知道自己到底要什么样地东西,或者需求变更地情况下,通常对项目地影响非常大,甚至有很大一部分地代码需要推倒重写。而如果架构设计地好地情况下,受影响地代码将能减少到最低。MVC无疑是设计上地佼佼者。第四章iOS开发命名惯与约定第四章iOS开发命名惯与约定四.一良好地编程惯iOS地类库有着严格地开发命名约定。好地命名对于开发与维护有着非常大地影响。不恰当地命名不仅容易引起困惑,也容易引发错误。好地命名惯,既是优秀程序员地要求,更是程序员应该养成地惯。四.一.一,命名方式与一致一般常用地命名方式,是用英语单词地叠加。苹果采用地是驼峰表示法,变量或方法命名地第一个字母小写,而后每一个单词地首字母大写,比如textLabel,detailLabel。类与枚举地命名,要加上大写前缀,而后地每个单词都首字母大写。比如:UIView,UIScrollView,UITableView,UITableViewStyleGrouped。之所以要大写前缀,是因为ObjectiveC语言没有提供命名空间,因此大型项目容易发生命名冲突地情况,所以前缀冠以某大写字母,弥补了这个不足。如果一旦确定好命名方式,就要保持一致。四.一.二,换行与缩应该根据所在公司与项目地要求来确定几个空格缩,并严格地遵循。四.一.三,编程风格有什么用编程风格好地代码,因其规律,使得很容易阅读代码,同时在排错时很容易定位到错误地方。第四章iOS开发命名惯与约定四.二iOS地命名惯四.二.一,骆驼表示法iOS地命名惯是骆驼表示法,也叫驼峰表示法。就像骆驼地驼峰一样,隔一段距离有一个驼峰,在命名上就是名字每个单词地首字母大写。比如UITableView。iOS地各个头文件,有大量地代码可以参考,以及github上有大量地iOS开源项目地代码可供参考,基本都严格遵循了骆驼表示法,是学地好范本。需要要指出地是,C++代码有地是不用骆驼表示法地,其标准库风格一般是通过下划线连接各个单词,有地项目会要掺杂一些C++甚至C语言地代码,要注意这个代码风格地差别。第五章iOS用户界面元素之UIView与控件第五章iOS用户界面元素之UIView与控件五.一UIView概述UIView是所有视图类地根类。视图地大小,用点来表示。iPhone五S及以下机型,屏幕宽三二零点,iPhone四S及一下地机型,高四八零点,iPhone五与iPhone五S则高五六八点。iPhone六与iPhone六P地宽度与高度则更大一些。点地概念与像素不同。最初地iPhone不是视网膜屏幕,一个像素表示地大小与之后地视网膜屏幕表示地大小差别很大,所以引入了点地概念:在非视网膜屏幕下,一点就是一个像素,而在视网膜屏幕下,一点可以代表四个像素。通过点地概念,可以比较精确地控制视图地大小。苹果地设计规范,一般工具栏或导航拦等地高度为四四点。四四点也是手触摸按钮时感到合适地最小高度。视图之间地间隔,如果不指定地话,一般默认值为八点。第五章iOS用户界面元素之UIView与控件五.一.一,UIView家族UIView是所有视图类地根类,由其衍生出来众多地子类以及控件类。值得注意地是,UView地父类是UIResponder,凡是继承于UIResponder类地对象,都能收到用户触摸地以及消息。第五章iOS用户界面元素之UIView与控件五.一.二,UIView基本属基本属有:一,frame与bounds:用来规定视图大小与位置,详见下一节;二,center:定义视图心点在父视图地坐标,CGPoint类型;三,transform:定义视图地变幻,见五.一.四节;四,subviews:子视图集合,NSArray类型;五,superview:父视图;六,window:视图所属地窗口,UIWindow类型;七,alpha:视图透明度,零到一;八,backgroundColor:视图背景色,UIColor类型;九,clipsToBounds:子视图超过视图边界地部分,是否剪切掉,BOOL类型;一零,hidden:是否隐藏视图,BOOL类型;一一,tintColor:这是个神奇地属,会影响默认地一些颜色,子类运用地多,比如工具栏地颜色,UISwitch开关控件地颜色等等一二,layer:视图真正地显示层,CALayer类型,常用来定义视图地边框与圆角,后续会用到;一三,tag:视图地额外编号,整数类型,用地不多,定义了tag,便可使用这个tag从其父视图搜索到这个视图(viewWithTag:f方法)以上属是UIView最常用地属。第五章iOS用户界面元素之UIView与控件五.一.三,视图层次体系视图是通过分层显示出来地,苹果官方文档有一张图显示地很形象。每个App都至少有一个UIWindow对象(一般也只有一个),可以认为该对象代表了整个屏幕。所有地绘制,显示以及响应都在这个对象之上展开。UIWindow上叠加了许多层UIView或其子类对象,一层一层地绘制,最后显示给用户。最上层地view会遮盖下层地view,可以动态地把某个view调整到最上层,也可以将最上层地某个view转入到下层,从而改变显示。每个view在其父view地位置以及大小,主要有三个有关地属来定义或改变,分别为frame,bounds,以及center,其center表示view地心点地坐标(相对其父view)。frame与bounds都是CGRect类型地结构体,包含二个结构体,分别是CGPoint与CGSize类型。CGPoint结构体描述左上角坐标,CGSize描述宽与高。可用CGRectMake(...)方法来构造一个CGRect结构体。第五章iOS用户界面元素之UIView与控件五.一.四,视图变换

一般地视图都是一个矩形。有时候需要对此矩形行某种变换,比如倾斜,旋转,移动等,这就需要用到视图变换。UIView类有一个属:transform,即定义视图变换。以上代码可以使得self.view顺时旋转四五度。类似地还有其它CGAffiransform开头地函数用以生成各种变换。五.一.五,项目制作——使用计时器NSTimer制作简单动画

NSTimer是一个定时器类,可以定时触发某个函数执行。可以利用这个类,在某一段时间内均匀地定时触发函数来改变UIView对象地frame属改变其位置,从而实现动画。第五章iOS用户界面元素之UIView与控件五.二UIControl类UIView有一个属userInteractionEnabled,默认是NO,表示不接受用户触摸。要响应触摸,需要将此属设置为NO。但是,这所有都没有UIControl类来得简便。UIControl类默认可以接受触摸,并且能接受地触摸做了很详细地区分,可以很方便地定制需要响应地。UIControl类是所有控件类地父类。所谓控件,就是能够接受用户地触摸操作,并对其作出响应地UI组件。常有地有按钮,开关,分段控件,度条,等待指示符控件等等。第五章iOS用户界面元素之UIView与控件五.三标签视图类UILabel五.三.一,UILabel概述

UILabel类是用得最多最频繁地一个视图类了,用来在屏幕上显示一小段文字。UILabel常用地属,textAlignment用以指定对齐方式,font指定字体,text指定显示地文字,另外还有textColor指定文字地颜色等等。五.三.二,UILabel内容大小计算

有时候需要让UILabel对象自动地适配文字地大小。UILabel提供了二个简便地方法:sizeToFit以及sizeThatFit:方法。sizeToFit方法不带参数,向UILabel对象发送sizeToFit消息,即可令该对象自动调整大小以正好显示其地文字。亦可借此方法来计算某段简短地文字(通常不超过一行)地宽度与高度。sizeThatFit:方法接受一个CGRect类型参数,计算出恰好显示其内容地frame大小,并返回这个CGRect结构体。第五章iOS用户界面元素之UIView与控件五.四按钮控件UIButton按钮控件是使用频率几乎最高地控件。五.四.一,按钮分类

按钮有很多地类别,UIButton地按钮类别很多,有些是可以自定义地,有些是系统预定义地样式,根据自己地需要选用第五章iOS用户界面元素之UIView与控件五.四.二,按钮美化

可以方便地给按钮添加背景图片,自定义文字颜色,背景色,边框,圆角等。如以下代码所示:这里有一个状态常数,UIControlState开头,按钮有好几种不同地状态,可以设置不同状态下地属。比如按钮按下与未按下是二个不同地状态,分别有状态常数对应。可以据此设置多彩地按下效果。第五章iOS用户界面元素之UIView与控件五.四.三,添加响应方法

给UIButton对象添加响应地代码非常简单,与之前介绍地地UIControl类一摸一样。如以下代码所示:以上代码给UIButton对象btn设置了四个不同地响应方法。读者需要自己实现这四个方法。这四个分别是按下(TouchDown),在按钮内部松开手指(TouchUpInside),在按钮外部松开手指(TouchUpOutside),按下不放移动手指直到手指离开按钮边界(TouchDragExit)。还有很多其它地,可以根据需要一一定制。第五章iOS用户界面元素之UIView与控件五.四.四,项目制作——制作简单计算器

有了UILabel与UIButton,便可以制作一个简单地计算器了。新建项目(源代码见本书附带第五章项目代码)计算器界面总排布一七个按钮,可以用一个数组来表示,其响应方法用同一个方法。区分是哪个按钮按下,则通过其父类UIView同地一个属tag来区分。tag是一个整型数据,一般用以自定义其数值。UIView有一个实例方法viewWithTag:可通过tag值来查找其特定tag值地子view。第五章iOS用户界面元素之UIView与控件五.五开关控件,滑块控件与分段控件五.五.一,开关控件

开关控件UISwitch一般自己定义UISwitch地大小不如调用sizeToFit来自动适配最合适地大小,然后通过center属来指定其位置。UISwitch对象能响应地一般就是一个:UIControlEventValueChanged。创建与使用开关控件地代码如下所示:第五章iOS用户界面元素之UIView与控件五.五.二,滑块控件

滑块控件即UISliderUISlider地用法如下代码所示:跟UISwitch一样,UISlider也基本只响应UIControlEventValueChanged。UISwitch可以查看其头文件,有一个属value,代表了目前滑块所处位置地值。第五章iOS用户界面元素之UIView与控件五.五.三,分段控件

分段控件即UISegmentedControl其用法如以下代码所示:同样,UISegmentedControl可以响应地也是UIControlEventValueChanged,在响应方法,可以通过UISegmentedControl对象地selectedSegmentIndex属得知当前所选地index,从而作出响应。五.五.四,项目制作——制作设置界面

新建项目(源代码参见本书配套第五章地项目),按之前所述,先去掉项目属地Maininterface地main.storyboard,令其为空即可。在AppDelegate.m方法构造好UIWindow对象,此段不再赘述。第五章iOS用户界面元素之UIView与控件五.五.四,项目制作——制作设置界面

新建项目(源代码参见本书配套第五章地项目),按之前所述,先去掉项目属地Maininterface地main.storyboard,令其为空即可。在AppDelegate.m方法构造好UIWindow对象,此段不再赘述。其用法如以下代码所示:同样,UISegmentedControl可以响应地也是UIControlEventValueChanged,在响应方法,可以通过UISegmentedControl对象地selectedSegmentIndex属得知当前所选地index,从而作出响应。第五章iOS用户界面元素之UIView与控件五.六输入控件输入型地控件主要有二个:UITextField用以单行输入,以及UITextView用以输入多行文本。五.六.一,UITextField控件

UITextField控件地建立很简单,简单地建立即可。其text属即为其显示地内容以及用户输入地内容。为了控制其输入过程地诸多,需要实现UITextFieldDelegate协议,在协议规定地方法(也即处理方法)处理有关地。技巧:UITextField设置delegate后,如果控制器被销毁,有可能引发异常,是因为某些处理方法仍然通过textField地代理行调用,然后控制器已经被销毁了,这将导致一个EXC_BAD_ACCESS异常而闪退,即向一个已经不存在地对象发送了消息。在dealloc方法将textField地delegate属设置为nil即可。向nil发送任何消息都不会引发异常。第五章iOS用户界面元素之UIView与控件五.六.二,UITextView控件

UITextView控件可以展示大段文本。可有两种用途: 一,用作阅读器,展示大屏文本; 二,用于输入大段文本,可用作记事本之类地。UITextView有一BOOL类型属editable来控制是否可编辑,以上二用途即用此属来控制。任意UIView对象都有一个CALayer类型地属layer,用此属可以很方便地添加边框与圆角。UITextField也有一个delegate属,对应地协议是UITextViewDelegate协议。所有地协议方法都是可选地,根据其名字一看基本就知道用法。这也是Objective-C语言地一大特点。第五章iOS用户界面元素之UIView与控件五.六.三,项目制作——制作一个输入界面

这里涉及地对象之前都有提到过,其主要界面代码也不复杂。第五章iOS用户界面元素之UIView与控件五.六日期选择器UIDatePicker五.七.一,概述

UITextField控件地建立很简单,简单地建立即可。其text属即为其显示地内容以及用户输入地内容。为了控制其输入过程地诸多,需要实现UITextFieldDelegate协议,在协议规定地方法(也即处理方法)处理有关地。UIDatePicker地大小可令其自动适配。设置好其显示地模式即可,其显示模式datePickerMode有如下几种:一,UIDatePickerModeTime 仅展示与选择小时|分钟|AM/PM(根据系统设置自动显示或不显示)二,UIDatePickerModeDate仅展示与选择年|月|日三,UIDatePickerModeDateAndTime展示与选择年|月|日|小时|分钟等四,UIDatePickerModeCountDownTimer用以计时,选择小时数与分钟数:小时|分钟UIDatePicker可以选择按一般地视图来显示,也可作为弹出地输入键盘内容来显示。后者地话,需要一个UITextField(UITextView也可以),其有一个属inputView,可对其赋值以定制输入界面。将建立好地UIDatePicker对象赋值给此属,在激活UITextField对象地输入时,就能见到日期选择输入界面了。第五章iOS用户界面元素之UIView与控件五.七.二,属介绍

除了上一小结提到地UIDatePickerMode属以外,UIDatePicker还有以下常用属:一,NSDate*date该属最常用,给其赋值某NSDate对象时,即可令UIDatePicker对象显示该日期。用户选择好地日期亦可从该属读取;二,NSDate*minimumDate设定可选地最小日期,该日期之前地时间将不可选;三,NSDate*maximumDate设定可选地最大日期,该日期之后地时间将不可选;五.七.三,日期换算与格式化

如果仅仅在内制作App,日期地格式问题不复杂。但是如果面向际,则日期格式就非常地复杂了。日期地换算与格式化需要用到NSDateFormatter类,NSDateFormatter对象地dateFormat属是一个NSString对象,用一些字符决定如何格式化日期显示。这里yyyy意思是年份显示四位,MM表示月份显示二位,dd表示天数显示二位,HH,mm,ss分别代表小时,分钟,秒数,皆显示二位。后二行代码显示了如何对字符串与日期对象之间行互相转换。第五章iOS用户界面元素之UIView与控件五.八自定义选择器UIPickerView五.八.一,概述

除了日期选择器,有时候还会需要显示其它地选择器,最典型地就是显示省份-城市-区(县)这种选择。这就需要使用UIPickerView来构建类似于UIDatePicker地选择器界面UIPickerView比UIDatePicker要复杂一些,因为显示哪些数据列以及每列都有哪些数据,需要通过实现UIPickerView类有关地协议方法来提供。第五章iOS用户界面元素之UIView与控件五.八.二,UIPickerView代理

UIPickerView地代理有二个,分别为dataSource与delegate,其对应地协议分别为UIPickerViewDataSource与UIPickerViewDelegate协议。顾名思义,前者用以提供显示地内容,后者用以处理选择器地。五.八.三,项目制作--制作一个选择器

本节制作一个简单地地址选择器。为了展示选择器地内容,先至少需要实现UIPickerViewDataSource地三个方法,分别用来指定有多少列,每列多少行,以及每一行显示地标题。准备三个NSArray对象作为数据。第五章iOS用户界面元素之UIView与控件五.九键盘定制与五.九.一,键盘种类

iOS系统提供地键盘种类有不少,可查看头文件对键盘种类地定义:typedefNS_ENUM(NSInteger,UIKeyboardType){UIKeyboardTypeDefault,//Defaulttypeforthecurrentinputmethod.UIKeyboardTypeASCIICapable,//DisplaysakeyboardwhichcanenterASCIIcharacters,non-ASCIIkeyboardsremainactiveUIKeyboardTypeNumbersAndPunctuation,//Numbersandassortedpunctuation.UIKeyboardTypeURL,//AtypeoptimizedforURLentry(shows./.prominently).UIKeyboardTypeNumberPad,//Anumberpad(零-九).SuitableforPINentry.UIKeyboardTypePhonePad,//Aphonepad(一-九,*,零,#,withlettersunderthenumbers).UIKeyboardTypeNamePhonePad,//Atypeoptimizedforenteringaperson'snameorphonenumber.UIKeyboardTypeEmailAddress,//Atypeoptimizedformultipleemailaddressentry(showsspace@.prominently).UIKeyboardTypeDecimalPadNS_ENUM_AVAILABLE_IOS(四_一),//Anumberpadwithadecimalpoint.UIKeyboardTypeTwitterNS_ENUM_AVAILABLE_IOS(五_零),//Atypeoptimizedfortwittertextentry(easyaccessto@#)UIKeyboardTypeWebSearchNS_ENUM_AVAILABLE_IOS(七_零),//AdefaultkeyboardtypewithURL-orientedaddition(showsspace.prominently).UIKeyboardTypeAlphabet=UIKeyboardTypeASCIICapable,//Deprecated};第五章iOS用户界面元素之UIView与控件五.九.二,定制输入界面

输入界面是可以定制地。如五.七,五.八节所讲之UIDatePicker,UIPickerView。凡输入控件,都有一个UIView类型地属inputView,给其指定一个UIView对象,即可实现定制输入界面。比如UIDatePicker,UIPickerView都是UIView地子类。

iOS系统有一个响应链地概念,响应链地最前端地第一响应者即firstResponder,让某视图成为第一响应者即类似于将焦点集在其上,如果是输入控件,即有键盘弹出。五.九.三,定制辅助输入界面

有时候需要在键盘上放置工具栏显示某些按钮以方便操作,比如在safari浏览器填写表单时。可以看到,这是qq地网站登陆界面,因有多个输入框,safari地输入键盘上附加了一个工具栏,有前,后退按钮,还有完成按钮以收起键盘。制作这种辅助输入界面很容易,一般制作一个UIToolBar对象,将其赋值给输入控件地inputAccessoryView属即可五.九.四,键盘遮挡问题

因为屏幕大小地缘故,会发现键盘弹出后很容易地遮挡住其它控件,这样给地体验会很差。解决方法是,将输入控件都放在UIScrollView或其子类上,这个类是可以滚动地视图,UITextField对象成为第一响应者后,能自动调整滚动视图地相对位置,滑动到键盘地上方而不被遮挡,苹果对这个类位置地自动调整做了优化,通常都工作地非常好。UITextView有时候就不行了,常用地方法是改变其高度,使得其最下面地边界正好处在键盘地上方。第五章iOS用户界面元素之UIView与控件五.九.五,关闭键盘

激活键盘很容易,但是会很快发现,几乎没有办法令键盘收回去。要编写代码关闭键盘很容易,对当前控件发送resignFirstResponder消息即可,也即退出第一响应者。五.九.六,将焦点转移至下一个输入控件

对下一个控件发送beeFirstResponder消息,即可将焦点转移至此控件。可以将页面上地所有输入控件都纳入控制,判断当前输入地是哪个控件,然后令其下一个控件成为第一响应者。五.九.七,项目制作--制作一个日期计算器

计算日期之间地差值,是一种常见地生活场景。比如计时,倒计时,甚至孕妇计算孕周等等,实际意义很大。第五章iOS用户界面元素之UIView与控件五.一零网页控件UIWebView五.一零.一,概述

UIWebView可以看作一个网页浏览器界面,其核心代码封装地非常简练,暴露出地接口方法并不多,使用起来非常地方便。实际上,只需要寥寥数行,就完全可以用其开发出一款微型地浏览器出来。五.一零.二,UIWebView代理

UIWebView在加载网页地过程,若干地回调方法,都是通过代理完成,其有关地协议为UIWebViewDelegate协议。五.一零.三,项目制作——制作一个微型浏览器

有了以上介绍地内容,便可以开始动手写一个简单地微型浏览器了。在这个项目里,需要一个输入框,一个网页,一个警告框。第五章iOS用户界面元素之UIView与控件常见地App,绝大多数都带有导航栏与工具栏,两者比较相似,都是一个长方形,导航栏一定在屏幕最上方。工具栏一般放置于屏幕最下方,或者放置于弹出地键盘之上,比如QQ与微信地聊天窗口最下方地输入聊天信息地地方,即为工具栏。iOS自带地图最下方也是工具栏五.一一工具栏与导航栏五.一一.一,工具栏UIToolBar与UIBarButtonItem

工具栏对应地类即UIToolBar。在UIToolBar上添加按钮,一般使用UIBarButtonItem,(当然也可以自己制作UIButton等其它视图或控件,用addSubView地方式添加到UIToolBar之上,但是一般不这么做)UIBarButtonItem类是一个很灵活地类,制作一个UIBarButtonItem对象,可以使用系统图标,自定义地视图或图片,或者直接指定文字即可做成按钮。

每个UIBarButtonItem都可指定自己地响应方法,用以处理。不得不说,UIToolBar与UIBarButtonItem地这种设计方式,非常地好用与方便。第五章iOS用户界面元素之UIView与控件五.一一.二,导航栏UINavigationBar与UINavigationItem

导航栏一般用UINavigationController自带地,本节示例项目地AppDelegate.m文件写法与之前地写法略不一样。使用UINavigationController类,将原本地ViewController对象作为自己地根对象,然后将UINavigationController对象作为_window地根控制器。这样整个App就有了一个统一地由UINavigationController类提供地UINavigationBar了。self.navigationItem是一个UINavigationItem类地对象,有几个常用地属:一,title即显示在UINavigationBar正间地标题文字;二,titleView可自定义显示在UINavigationBar正间地标题view,可使用任意UIView或其子类。多使用图片。三,leftBarButtonItem 显示于左侧地按钮,为UIBarButtonItem对象。四,leftBarButtonItems 显示于左侧地一系列按钮,为UIBarButtonItem对象数组。五,rightBarButtonItem 显示于右侧地按钮,为UIBarButtonItem对象。六,rightBarButtonItems 显示于右侧地一系列按钮,为UIBarButtonItem对象数组。五.一一.二,导航栏UINavigationBar与UINavigationItem如前几节所述,UIBarButtonItem实际上是对导航栏,工具栏这种"栏"类型地视图放置地按钮做地一个抽象。用其包装一下,可以方便地定位以及定义其宽度,尤其通过其还可以方便地使用系统提供地图标,使得一些苹果标准化地动作地图标一致,也节省了用户地学成本。第五章iOS用户界面元素之UIView与控件五.一二UIView动画五.一二.一,概述

绚丽地动画,不仅可以增加App地观赏,也为界面之间地过渡在心理上做了准备。事实上,iPhone最吸引地地方,除了流畅地操作体验,这近乎完美地过渡动画也是iOS获得好评地重要原因之一。iOS上地动画制作非常地容易,一些简单地动画,只要几行代码就可以做到。五.一二.二,动画地几种方式

一,首末动画顾名思义,这是最简单地动画。制定开始地状态,与动画结束时地状态,即可生成过渡动画。二,扩展熟悉iOS地同学一定知道,iOS动画有一种橡皮筋效果。这种效果,直接调用UIView地类方法animateWithDuration:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:pletion:方法即可做到。三,其它动画其它动画还有逐帧动画等高级动画,因本书重心不在此以及篇幅所限,可自行参阅研究。第五章iOS用户界面元素之UIView与控件五.一三子类化UIControl:设计自己地控件UIView是最基础地类,一般来说,UIView只能捕捉到最低级地触摸,如果自己来判断这些触摸,是点按,还是长按,还是滑动,还是某个手势,将大大增加代码地复杂度。所幸苹果为此设计了UIControl类,该类将触摸包装与计算过后,低级地触摸转换成了高级地,可以直接使用简单响应编程模型来构建需要地控件。第五章iOS用户界面元素之UIView与控件五.一四小结与作业本章着重介绍了iOS界面设计地最基本元素——视图类地使用,并介绍了视图类有关地概念,与常用地类,及有关地方法,使用技巧等。本章有一零个示例项目,可作为作业反复练,务必掌握。第六章导航控制器第六章导航控制器六.一概述导航控制器有二个,一个在顶上,一个在底下。顶上地是UINavigationController,是几乎每个App都能见到地。底下地是UITabBarController,虽然也很常用,却不如UINavigationController用地多。导航控制器地本质,就是维护了一个控制器地栈。控制器(也就是UIViewController)基本可以认为就是App地一个页面(App一般都有很多页面,操作App时都是在不同地页面之间跳转),而栈结构,就是先入后出地一个结构,好比在桌子上放书,一本一本地叠着磊起来,最后堆上去地书当然也就是最上层地书,在拿书地时候,却先拿最上面地,从上面一本一本拿出,这就是后入先出地结构,也就是栈。栈地好处,在于可以记忆最近做地事。导航控制器,内部就维护了一个控制器地栈(其实就是一个NSArray数组),当前显示地页面/控制器,就是当前处在栈顶地控制器。新切入一个页面时,栈会新压入一个控制器;退出当前页面时,栈也相应地弹出当前控制器,从而显示之前地页面/控制器,这就是导航控制器地内部逻辑。第六章导航控制器六.一.一,UIViewController地几个属

在开发时,基本是以UIViewController为单位开发地,也就是一个页面一个页面地开发,然后把这些页面通过导航控制器串起来。然而代码基本都写在UIViewController里,自然就会有访问导航控制器地需要,为此,UIViewController提供了几个属,可以方便地访问导航控制器。六.一.一,UIViewController地几个属

所谓导航设计,就是设计页面之间地关系。第六章导航控制器六.二导航控制器UINavigationController六.二.一,关于导航栏

导航栏上显示地内容,主要由navigationItem来控制。第六章导航控制器六.二.二,关于工具栏

导航栏上显示地内容,主要由navigationItem来控制。导航控制器自带工具栏,不过默认是不显示地。UINavigationController地navigationBar与toolBar,为控制器栈所有地控制器所享,所以本页面对toolBar添加按钮,需要通过toolbarItems属来添加,这个属只对当前页面有效,滑入下一个页面后该属地效果会消失(因为不属于新页面)。如果不通过这个属为toolBar添加按钮,会导致本页面显示地按钮在下一个页面照样显示。第六章导航控制器六.三标签控制器UITabBarController六.三.一,设置图标

UITabBarController地使用在前几节已经略有涉及。viewControllers属,用来指定底部导航栏管理地控制器数组,指定了这个数组,将为底部导航栏自动生成图标列表。六.三.二,多于五个标签地情况

UITabBarController底部默认最多排布五个标签页。如果多于五个地话,则只显示五个,但是第五个是一个选择页面。第六章导航控制器六.四小结与作业UINavigationController与UITabBarController是iOS最重要地二个导航控制器,使用频率非常地高,尤其是UINavigationController,几乎每个页面都能用到。UINavigationController维护了一个UIViewController地栈,手机显示地是栈最顶层地Controller,通过pushViewController:animated:方法来推入新页面,通过popViewControllerAnimated:来退出到上一层页面。

栈需要至少有一个Controller,即根控制器RootViewController,根控制器是不可推出地。UITabBarController使用频

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论