1、1.iOS介绍3.iOS系统架构及iPhone应用程序框架2.Framework介绍4.iOS UItouch 及触摸事件与手势iOS介绍1.iOS 操作系统是 iPhone、iPod touch 以及 iPad 设备的核心。2.构建 iOS 平台的知识与 Mac OS X 系统同出一辙,iOS 平台的许多开发工具和开发技术也源自 Mac OS X。但开发者无须具备 Mac OS X 开发经验就可以编写 iOS 应用程序。iPhone 软件开发包(SDK)为着手创建 iOS 应用程序提供所需要的一切。Mac OS X 扩展了 framework 的功能,让我们能够利用它来共享代码和资源。fra
2、mework 在概念上有点像 Window 下的库,但是比库更加强大,通过 framework 我们可以共享所有形式的资源,如动态共享库,nib 文件,图像字符资源以及文档等。系统会在需要的时候将 framework 载入内存中,多个应用程序可以同时使用同一个 framework,而内存中的拷贝只有一份。一个 framework 同时也是一个 bundle,我们可以在 finder 里浏览其内容,也可以在代码中通过 NSBundle 访问它。利用 framework 我们可以实现动态或静态库的功能。与动态/静态库相比,framework 有如下优势:第一,framework 能将不同类型的资源
3、打包在一起,使之易于安装,卸载与定位;第二,framework 能够进行版本管理,这使得 framework 能不断更新并向后兼容;第三,在同一时间,即使有多个应用程序使用同一 framework,但在内存中只有一份 framework 只读资源的拷贝,这减少了对内存的占用Framework 简介 iOS系统架构及应用程序框架1.iOS架构和Mac OS的基础架构相似。站在高级层次来看,iOS 扮演底层硬件和应用程序(显示在屏幕上的应用程序)的中介。您创建的应用程序不能直接访问硬件,而需要和系统接口进行交互。系统接口转而又去和适当的驱动打交道。这样的抽象可以防止您的应用程序改变底层硬件。2.i
4、OS实现可以看作是多个层的集合,底层为所有应用程序提供基础服务,高层则包含一些复杂巧妙的服务和技术。3.在编写代码的时候,应该尽可能地使用高层框架,而不要使用底层框架。高层框架为底层构造提供面向对象的抽象。这些抽象可以减少需编写的代码行数,同时还对诸如socket和线程这些复杂功能进行封装,从而让编写代码变得更加容易。虽说高层框架是对底层构造进行抽象,但是它并没有把底层技术屏蔽起来。如果高层框架没有为底层框架的某些功能提供接口,开发者可以直接使用底层框架。Cocoa Touch是iPhone OS架构中最重要层之一。它包括开发iPhone应用的关键框架,当开发iPhone应用时,开发者总是从这
5、些框架开始,然后向下追溯到需要的较低层框 架。Cocoa Touch层主要包括UIKit框架,基础框架(Foundation Framework)CocoaTouch层为你提供了基本的系统行为支持,而且将你的工作量降到最低,当你想要实现更为复杂的行为和界面时,才考虑向下层探寻技术支持。Cocoa Touch 层苹果iOS系统的最接近用户的层面,包括了触摸、位置服务、摄像头等应用。Cocoa Touch 层包含的框架UIKit 框架(UIKit.framework)Map Kit 框架(MapKit.framework)Message UI 框架 (MessageUI.framework)Fou
6、ndation框架(Foundation.framework)Address Book UI 框架(AddressBookUI.framework)Event Kit UI 框架(EventKitUI.framework)Game Kit 框架(GameKit.framework)iAd 框架(iAd.framework)Cocoa touch层常用框架介绍1.UIKit UIKit框架(UIKit.framework)包含Objective-C程序接口,提供实现图形,事件驱动的iPhone应用的关键架构。iPhone OS中的每一个应用采用这个框架实现如下核心功能:应用管理、支持图形与窗口、
7、支持触摸事件处理、用户接口管理等等。3.Map Kit框架,iOS 3.0引入该框架,该框架供一个可被嵌入到应用程序的地图界面,该界面包含一个可以滚动的地图视图。4.Message UI框架,iOS 3.0引入该框架,可以利用该框架撰写电子邮件,并将其放入到用户的发件箱排队等候发送。5.Address Book UI 框架,可以显示创建或者编辑联系人的标准系统界面。2.Foundation Framework支持以下功能:collection数据类型(包括Arrays、sets)、字符串管理、线程和循环、URL、Stream、Bonjour、Bundles。Media层包含的框架Quartz
8、Core 框架(QuartzCore.framework)媒体播放器框架(MediaPlayer.framework)AV Foundation 框架(AVFoundation.framework)Core Graphics 框架(CoreGraphics.framework)Core Audio(CoreAudio.framework、AudioToolbox.framework、AudioUnit.framework)Core Text 框架(CoreText.framework)Core Video 框架(CoreVideo.framework)Image I/O 框架(ImageIO.
9、framework)OpenAL 框架OpenGL ES 框架(OpenGLES.framework)Media层包含图形、音频、视频技术Media层媒体层包括图像、音频和视频技术,采用这些技术在手机上创建最好的多媒体体验。更重要的是,应用这些技术开发的应用将有更好的视听效果。利用 iPhone OS高层框架可以快速地创建先进的图像和动画。媒体层包括图像技术(Graphics Technologies,包括Quartz、Core Animation和OpenGL ES),音频技术(Audio Technologies,包括Core Audio和OpenAL)和视频技术(Video Techno
10、logies)。苹果iOS的Media层主要包括了各种媒体文件的处理,主要分为图像、视频、音频三个部分的处理,这些成为iOS系统的处理内容,成为了基本的媒体应用,并且可以被各种应用调用,提高了iOS的系统性能。1.Quartz Core框架包含Core Animation接口。Core Animation是高级动画制作和混合技术,它使用经过优化的渲染路径实现复杂的动画和视觉效果。2.媒体播放器框架(MediaPlayer.framework)为应用程序播放视频和音频内容提供高级支持。3.AV Foundation 框架,该框架包含的Objective-C 类可用于播放音频内容。4.Core G
11、raphics框架(CoreGraphics.framework)包含Quartz 2D绘图API接口。该框架基于C接口,提供绘画功能。Media层常用框架介绍(1)图像技术(Graphics Technologies)高质量图像是所有iPhone应用的一个重要的组成部分。任何时候,开发者可以采用UIKit 框架中已有的视图和功能以及预定义的图像来开发iPhone应用。然而,当UIKit 框架中的视图和功能不能满足需求时,开发者可以应用下面描述的技术和方法来制作视图。Quartz核心动画(Core Animation)OpenGL ES(2)音频技术(Audio Technologies)iP
12、hone OS的音频技术为用户提供了丰富的音频体验。它包括音频回放,高质量的录音和触发设备的振动功能等。iPhone OS的音频技术支持如下音频格式:AAC、Apple Lossless(ALAC)、A-law、IMA/ADPCM(IMA4)、Linear PCM、-law和Core Audio等。核心音频(Core Audio Family)OpenAL(3)视频技术(Video Technologies)iPhone OS通过媒体播放框架(MediaPlayer.framework)支持全屏视频回放。媒体播放框架支持的视频文件格式包括.mov,.mp4,.m4v和.3gp,并应用如下压缩标
13、准:H.264 Baseline Profile Level 3.0 video,在30 f/s 的情况下分辨率达到640480像素。注意:不支持B frames;MPEG4规范的视频部分;众多的音频格式,包含在音频技术的列表里,如AAC、Apple Lossless(ALAC)、A-law、IMA/ADPCM(IMA4)、线性PCM、-law和Core Audio等。Core services层Core Services层为所有的应用程序提供基础系统服务。可能应用程序并不直接使用这些服务,但它们是系统很多部分赖以建构的基础。Core Services层包含框架1.电话本2.核心基础框架(Co
14、reFoundation.framework)核心基础框架与基础框架是紧密相关的,它们为相同的基本功能提供了Objective-C接口3.CFNetwork4.核心位置框架(Core Location Framework)5.安全框架(Security Framework)6.Sqlite7.支持XMLiOS操作系统的Core Services包含了多种服务,例如URL服务,还有大量的网络应用等(1)电话本)电话本电话本框架(电话本框架(AddressBook.framework)提供了保存在手机设备中的电话本编程接口。开发)提供了保存在手机设备中的电话本编程接口。开发者能使用该框架访问和修改
15、存储在用户联系人数据库里的记录。例如,一个聊天程序可以使用者能使用该框架访问和修改存储在用户联系人数据库里的记录。例如,一个聊天程序可以使用该框架获得可能的联系人列表,启动聊天的进程(该框架获得可能的联系人列表,启动聊天的进程(Process),并在视图上显示这些联系人信),并在视图上显示这些联系人信息等。息等。(2)核心基础框架)核心基础框架核心基础框架(核心基础框架(CoreFoundation.framework)是基于)是基于C语言的接口集,提供语言的接口集,提供iPhone应用的基应用的基本数据管理和服务功能。该框架支持如下功能:本数据管理和服务功能。该框架支持如下功能:Collec
16、tion数据类型(数据类型(Arrays、Sets等);等);Bundles;字符串管理;日期和时间管理;原始数;字符串管理;日期和时间管理;原始数据块管理;首选项管理;据块管理;首选项管理;URL和和Stream操作;线程和运行循环(操作;线程和运行循环(Run Loops);端口和);端口和Socket通信。通信。核心基础框架与基础框架是紧密相关的,它们为相同的基本功能提供了核心基础框架与基础框架是紧密相关的,它们为相同的基本功能提供了Objective-C接口。如果接口。如果开发者混合使用开发者混合使用Foundation Objects 和和Core Foundation类型,就能充分
17、利用存在两个框架中类型,就能充分利用存在两个框架中的的toll-free bridging。toll-free bridging意味着开发者能使用这两个框架中的任何一个的核意味着开发者能使用这两个框架中的任何一个的核心基础和基础类型,例如心基础和基础类型,例如Collection和字符串类型等。每个框架中的类和数据类型的描述注明和字符串类型等。每个框架中的类和数据类型的描述注明该对象是否支持该对象是否支持toll-free bridged。如果是,它与哪个对象桥接(。如果是,它与哪个对象桥接(toll-free bridged)。)。(3)CFNetworkCFNetwork框架(CFNetw
18、ork.framework)是一组高性能的C语言接口集,提供网络协议的面向对象的抽象。开发者可以使用 CFNetwork框架操作协议栈,并且可以访问低层的结构如BSD Sockets等。同时,开发者也能简化与FTP和HTTP服务器的通信,或解析DNS等任务。使用CFNetwork框架实现的任务如下所示:BSD Sockets;利用SSL或TLS创建加密连接;解析DNS Hosts;解析HTTP协议,鉴别HTTP和HTTPS服务器;在FTP服务器工作;发布、解析和浏览Bonjour服务。(4)核心位置框架(Core Location Framework)核心位置框架(CoreLocation.f
19、ramework)主要获得手机设备当前的经纬度,核心位置框架利用附近的GPS、蜂窝基站或Wi-Fi信号信息测量用户的当前位置。iPhone地图应用使用这个功能在地图上显示用户的当前位置。开发者能融合这个技术到自己的应用中,给用户提供一些位 置信息服务。例如可以提供一个服务:基于用户的当前位置,查找附近的餐馆、商店或设备等。(5)安全框架(Security Framework)iPhone OS除了内置的安全特性外,还提供了外部安全框架(Security.framework),从而确保应用数据的安全性。该框架提供了管理证书、公钥/私 钥对和信任策略等的接口。它支持产生加密安全的伪随机数,也支持保
20、存在密钥链的证书和密钥。对于用户敏感的数据,它是安全的知识库(Secure Repository)。CommonCrypto接口也支持对称加密、HMAC和数据摘要。在iPhone OS里没有OpenSSL库,但是数据摘要提供的功能在本质上与OpenSSL库提供的功能是一致的。(6)SQLiteiPhone应用中可以嵌入一个小型SQL数据库SQLite,而不需要在远端运行另一个数据库服务器。开发者可以创建本地数据库文件,并管理这些文件中 的表格和记录。数据库SQLite为通用的目的而设计,但仍可以优化为快速访问数据库记录。访问数据库SQLite的头文件位 于/usr/include/sqlite
21、3.h,其中是SDK安装的目标路径。(7)支持XML基础框架提供NSXMLParser类,解析XML文档元素。libXML2库提供操作XML内容的功能,这个开放源代码的库可以快速解析和编辑 XML数据,并且转换XML内容到HTML。访问libXML2库的头文件位于目录/usr/include/libxml2/,其中是SDK安装的目标目录。Core OS层Core OS是最为核心的系统,它包括内存管理、文件系统、电源管理以及一些其他的操作系统任务。它可以直接和硬件设备进行交互,是iOS的核心应用。事实上,iOS是基于Unix系统开发的,自然跟Unix一样了。4核心OS层(Core OS Laye
22、r)核心OS层包含操作系统的内核环境、驱动和基本接口。内核基于Mac操作系统,负责操作系统的各个方面。它管理虚拟内存系统、线程、文件系统、网络和内部 通信。核心OS层的驱动也提供了硬件和系统框架之间的接口。然而,由于安全的考虑,只有有限的系统框架类能访问内核和驱动。iPhone OS提供了许多访问操作系统低层功能的接口集,iPhone 应用通过LibSystem库来访问这些功能,这些接口集如下所示:线程(POSIX线程);网络(BSD sockets);文件系统访问;标准I/O;Bonjour和DNS服务;区域语言相关信息(Locale Information);内存分配;数学计算。UIKit
23、的视图类的视图类 UIView类定义了视图的基本行为,但并不定义其视觉表示。相反,UIKit通过其子类来为像文本框、按键、及工具条这样的标准界面元素定义具体的外观和行为。右图显示了所有UIKit视图类的层次框图。除了UIView和UIControl类是例外,这个框图中的大多数视图都设计为可直接使用,或者和委托对象结合使用。IOS之触摸事件和手势之触摸事件和手势 1 事件概述事件概述事件是当用户手指触击屏幕及在屏幕上移动时,系统不断发送给应用程序的对象。系统将事件按照特定的路径传递给可以对其进行处理的对象。在iOS中,一个UITouch对象表示一个触摸,一个UIEvent对象表示一个事件。事件对
24、象中包含与当前多点触摸序列相对应的所有触摸对象,还可以提供与特定视图或窗口相关联的触摸对象。响应者对象响应者对象响应者对象是可以响应事件并对其进行处理的对象。UIResponder是所有响应者对象的基类,它不仅为事件处理,而且也为常见的响应者行为定义编程接口。UIApplication、UIView、和所有从UIView派生出来的UIKit类(包括UIWindow)都直接或间接地继承自UIResponder类。第一响应者是应用程序中当前负责接收触摸事件的响应者对象(通常是一个UIView对象)。UIWindow对象以消息的形式将事件发送给第一响应者,使其有机会首先处理事件。如果第一响应者没有进
25、行处理,系统就将事件(通过消息)传递给响应者链中的下一个响应者,看看它是否可以进行处理。为了处理给定阶段的事件,响应者对象常常从传入的集合参数中取得一或多个UITouch 对象,然后考察这些对象的属性或取得它们的位置(如果需要处理所有触摸对象,可以向该NSSet 对象发送anyObject 消息)。UITouch 类中有一个名为locationInView:的重要方法,如果传入self 参数值,它会给出触摸动作在响应者坐标系统中的位置(假定该响应者是一个UIView 对象,且传入的视图参数不为nil)。另外,还有一个与之平行的方法,可以给出触摸动作之前位置(previousLocationIn
26、View:)。UITouch 实例的属性还可以给出发生多少次触碰(tapCount)、触摸对象的创建或最后一次变化发生在什么时间(timestamp)、以及触摸处于什么阶段(phase)。响应者链响应者链响应链是一个响应者对象的连接序列,事件或动作消息(或菜单编辑消息)依次传递。它允许响应者对象把事件处理的职责转交给其它更高层的对象。应用程序通过向上传递一个事件来查找合适的处理对象。因为点击检测视图也是一个响应者对象,应用程序在处理触摸事件时也可以利用响应链。响应链由一系列的下一个响应者组成。响应者链处理原则响应者链处理原则1.点击检测视图或者第一响应者传递事件或动作消息给它的视图控制器(如果
27、它有的话);如果没有一个视图控制器,就传递给它的父视图。2.如果一个视图或者它的视图控制器不能处理这个事件或动作消息,它将传递给该视图的父视图。3.在这个视图层次中的每个后续的父视图遵循上述的模式,如果它不能处理这个事件或动作消息的话。4.最顶层的视图如果不能处理这个事件或动作消息,就传递给UIWindow对象来处理。5.如果UIWindow 对象不能处理,就传给单件应用程序对象UIApplication。如果应用程序对象也不能处理这个事件或动作消息,将抛弃它。2 触摸事件触摸事件触摸信息有时间和空间两方面,时间方面的信息称为阶段(phrase),表示触摸是否刚刚开始、是否正在移动或处于静止状
28、态,以及何时结束也就是手指何时从屏幕抬起。触摸信息还包括当前在视图或窗口中的位置信息,以及之前的位置信息(如果有的话)。当一个手指接触屏幕时,触摸就和某个窗口或视图关联在一起,这个关联在事件的整个生命周期都会得到维护。触摸事件的阶段-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event;-(void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event;-(void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)even
29、t;-(void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event;当手指接触屏幕时,就会调用touchesBegan:withEvent方法;当手指在屏幕上移时,动就会调用touchesMoved:withEvent方法;当手指离开屏幕时,就会调用touchesEnded:withEvent方法;当触摸被取消,就会调用touchesCancelled:withEvent方法。上面这些方法都和特定的触摸阶段(比如UITouchPhaseBegan)相关联,该信息存在于UITouch 对象的phase 属性声明中。上面的四个事件
30、方法,在开发过程中并不要求全部实现,可以根据需要重写特定的方法。对于这4个方法,都有两个相同的参数:NSSet类型的touches和UIEvent类型的event。其中touches表示触摸产生的所有UITouch对象,而event表示特定的事件。因为UIEvent包含了整个触摸过程中所有的触摸对象,因此可以调用allTouches方法获取该事件内所有的触摸对象,也可以调用touchesForVIew:或者touchesForWindows:取出特定视图或者窗口上的触摸对象。在这几个事件中,都可以拿到触摸对象,然后根据其位置,状态,时间属性做逻辑处理。touch.phase,触摸事件的阶段。t
31、ouch.tapCount,触摸事件的轻碰次数,可以判断双击事件。UIEvent 的allTouches方法,可以获得触摸点的集合,可以判断多点触摸事件。3 手势手势单碰击双碰击多点触摸(合拢和展开)轻抚 实例.单碰击为红色,双碰击为蓝色self performSelector:selector(turnRed)withObject:nil afterDelay:0.10f;是在0.1秒后调用turnRed方法。self classcancelPreviousPerformRequestsWithTarget:self selector:selector(turnRed)object:nil;是取消调用方法turnRed多点触摸(合拢和展开)多点触摸(合拢和展开)PinchZoom轻抚轻抚.