iOS系统架构及iPhone应用程序框架

1.iOS介绍
2.Framework介绍3.iOS系统架构及iPhone应⽤用程序框架

4.iOS UItouch 及触摸事件与⼿手势

iOS介绍
1. iOS 操作系统是 iPhoneiPod touch 以及 iPad 设备的核⼼心。

2.构建 iOS 平台的知识与 Mac OS X 系统同出⼀一⼀一辙,iOS 平台的许多开发⼯工具和开发技术也源⾃自 Mac OS X。但开发者⽆无须具备 Mac OS X 开发经验就可以编写 iOS应⽤用程序。iPhone 软件开发包(SDK)为着⼿手创建 iOS 应⽤用程序提供所需要的⼀一⼀一切。

Framework 简介

Mac OS X 扩展了 framework 的功能,让我们能够利⽤用它来共享代码和资源。framework 在概念上有点像 Window 下的库,但是⽐比库更加强⼤大,通过 framework 我们可以共享所有形式的资源,如动态共享库,nib ⽂文件,图像字符资源以及⽂文档等。系统会在需要的时候将framework 载⼊入内存中,多个应⽤用程序可以同时使⽤用同⼀一个framework,⽽而内存中的拷贝只有⼀一份。⼀一个 framework 同时也是⼀一个 bundle,我们可以在 finder ⾥里浏览其内容,也可以在代码中通过NSBundle 访问它。利⽤用 framework 我们可以实现动态或静态库的功能。

与动态/静态库相⽐比,framework 有如下优势:
第⼀一,
framework 能将不同类型的资源打包在⼀一起,使之易于安装,卸载与定位;
第⼆二,
framework 能够进⾏行版本管理,这使得 framework 能不断更新并向后兼容;
第三,在同⼀一时间,即使有多个应⽤用程序使⽤用同⼀一
framework,但在内存中只有⼀一份 framework 只读资源的拷贝,这减少了对内存的占⽤用

iOS系统架构及应⽤用程序框架
1. iOS架构和Mac OS的基础架构相似。站在⾼高级层次来看,iOS 扮演底层硬件和应⽤用程序(显⽰示在屏幕上的应⽤用程序)的

中介。您创建的应⽤用程序不能直接访问硬件,⽽而需要和系统接⼜⼝口进⾏行交互。系统接⼜⼝口转⽽而又去和适当的驱动打交道。这样
的抽象可以防⽌止您的应⽤用程序改变底层硬件。

2.iOS实现可以看作是多个层的集合,底层为所有应⽤用程序提供基础服务,⾼高层则包含⼀一些复杂巧妙的服务和技术。3.在编写代码的时候,应该尽可能地使⽤用⾼高层框架,⽽而不要使⽤用底层框架。⾼高层框架为底层构造提供⾯面向对象的抽象。这

些抽象可以减少需编写的代码⾏行数,同时还对诸如socket和线程这些复杂功能进⾏行封装,从⽽而让编写代码变得更加容易。

虽说⾼高层框架是对底层构造进⾏行抽象,但是它并没有把底层技术屏蔽起来。如果⾼高层框架没有为底层框架的某些功能提供
接⼜⼝口,开发者可以直接使⽤用底层框架。

Cocoa Touch

Cocoa TouchiPhone OS架构中最重要层之⼀一。它包括开发iPhone应⽤用的关键框架,当开发iPhone应⽤用时,开发者总是从这些框架开始,然后向下追溯到需要的较低层框 架。Cocoa Touch层主要包括UIKit框架,基础框架(Foundation Framework)

苹果iOS系统的最接近⽤用户的层⾯面,包括了触摸、位置服务、摄像头等应⽤用。

Cocoa Touch 层包含的框架

UIKit 框架 (UIKit.framework)
Map Kit 框架 (MapKit.framework)Message UI 框架 (MessageUI.framework)Foundation框架(Foundation.framework)

Address Book UI 框架 (AddressBookUI.framework)

Cocoa touch常⽤用框架介绍

1. UIKit UIKit框架(UIKit.framework)包含Objective-C程序接⼜⼝口,提供实现图形,事件驱动的iPhone应⽤用的关键架构。iPhone OS中的每⼀一个应⽤用采⽤用这个框架实现如下核⼼心功能:应⽤用管理、⽀支持图形与窗⼜⼝口、⽀支持触摸事件处理、⽤用户接⼜⼝口管理等等。

2.Foundation Framework⽀支持以下功能:collection数据类型(包括Arrayssets)、字符串管理、线程和循环、URLStreamBonjourBundles

3.Map Kit框架,iOS 3.0引⼊入该框架,该框架供⼀一⼀一个可被嵌⼊入到应⽤用程序的地图界⾯面,该界⾯面包含⼀一⼀一个可以滚动的地图视图。
4.Message UI框架, iOS 3.0引⼊入该框架,可以利⽤用该框架撰写电⼦子邮件,并将其放⼊入到⽤用户的发件箱排队等候发送。

5.Address Book UI 框架,可以显⽰示创建或者编辑联系⼈人的标准系统界⾯面。

Media

媒体层包括图像、⾳音频和视频技术,采⽤用这些技术在⼿手机上创建最好的多媒体体验。更重要的是,应⽤用这些技术开发的应⽤用将有更好的视听效果。利⽤用 iPhone OS⾼高层框架可以快速地创建先进的图像和动画。媒体层包括图像技术(GraphicsTechnologies,包括QuartzCore AnimationOpenGL ES),⾳音频技术(AudioTechnologies,包括Core AudioOpenAL)和视频技术(Video Technologies)。

Media层包含图形、⾳音频、视频技术Media层包含的框架

Quartz Core 框架 (QuartzCore.framework)媒体播放器框架(MediaPlayer.framework)
AV Foundation 框架 (AVFoundation.framework)
Core Graphics
框架 (CoreGraphics.framework)
Core Audio (
CoreAudio.frameworkAudioToolbox.frameworkAudioUnit.framework)Core Text 框架(CoreText.framework)
Core Video
框架(CoreVideo.framework)
Image I/O
框架 (ImageIO.framework)

OpenAL 框架
OpenGL ES 框架(OpenGLES.framework)

苹果iOSMedia层主要包括了各种媒体⽂文件的处理,主要分为图像、视频、⾳音频三个部分的处理,这些成为iOS系统的处理内容,成为了基本的媒体应⽤用,并且可以被各种应⽤用调⽤用,提⾼高了iOS的系统性能。

Media常⽤用框架介绍
1.Quartz Core框架包含Core Animation接⼜⼝口。Core Animation是⾼高级动画制作

2.媒体播放器框架 (MediaPlayer.framework)为应⽤用程序播放视频和⾳音频内容提供4.Core Graphics框架 (CoreGraphics.framework)包含Quartz 2D绘图API接⼜⼝口 。

和混合技术,它使⽤用经过优化的渲染路径实现复杂的动画和视觉效果。
⾼高级⽀支持。

(1)图像技术(Graphics Technologies)

⾼高质量图像是所有iPhone应⽤用的⼀一个重要的组成部分。任何时候,开发者可以采⽤用UIKit 框架中已有的视图和功能以及预定义的图像来开发iPhone应⽤用。然⽽而,当UIKit 框架中的视图和功能不能满⾜足需求时,开发者可以应⽤用下⾯面描述的技术和⽅方法来制作视图。

1 Quartz
2核⼼心动画(Core Animation)

3 OpenGL ES(2)⾳音频技术(Audio Technologies)

iPhone OS的⾳音频技术为⽤用户提供了丰富的⾳音频体验。它包括⾳音频回放,⾼高质量的录⾳音和触发设备的振动功能等。

iPhone OS的⾳音频技术⽀支持如下⾳音频格式:AACApple Lossless(ALAC)、A-lawIMA/ADPCM(IMA4)、Linear PCMμ-lawCore Audio等。

1 核⼼心⾳音频(Core Audio Family)2 OpenAL

(3)视频技术(Video Technologies)

iPhone OS通过媒体播放框架(MediaPlayer.framework)⽀支持全屏视频回放。媒体播放框架⽀支持的视频⽂文件格式包括.mov, .mp4,.m4v.3gp,并应⽤用如下压缩标准:

1 H.264 Baseline Profile Level 3.0 video,在30 f/s 的情况下分辨率达到640×480像素。注意:不⽀支持B frames;

2 MPEG4规范的视频部分;

3 众多的⾳音频格式,包含在⾳音频技术的列表⾥里,如AACApple Lossless(ALAC)、A-lawIMA/ADPCM(IMA4)、线性PCMμ-lawCoreAudio等。

Core services

1.电话本
2.核⼼心基础框架(CoreFoundation.framework)核⼼心基础框架与基础框架是紧密相关的,它们为相同的基本功能提供了Objective-C接⼜⼝口3.CFNetwork
4.
核⼼心位置框架(Core Location Framework)
5.安全框架(Security Framework)
6.Sqlite
7.
⽀支持XML

iOS操作系统的Core Services包含了多种服务,例如URL服务,还有⼤大量的⽹网络应⽤用等

(1)电话本

电话本框架(AddressBook.framework)提供了保存在⼿手机设备中的电话本编程接⼜⼝口。开发者能使⽤用该框架访问和修改存储在⽤用户联系⼈人数据库⾥里的记录。例如,⼀一个聊天程序可以使⽤用该框架获得可能的联系⼈人列表,启动聊天的进程(Process),并在视图上显⽰示这些联系⼈人信息等。

(2)核⼼心基础框架核⼼心基础框架(CoreFoundation.framework)是基于C语⾔言的接⼜⼝口集,提供iPhone应⽤用的基

本数据管理和服务功能。该框架⽀支持如下功能:

Collection数据类型(ArraysSets等);Bundles;字符串管理;⽇日期和时间管理;原始数据块管理;⾸首选项管理;URLStream操作;线程和运⾏行循环(Run Loops);端⼜⼝口和Socket通信。

核⼼心基础框架与基础框架是紧密相关的,它们为相同的基本功能提供了Objective-C接⼜⼝口。如果开发者混合使⽤用Foundation Objects Core Foundation类型,就能充分利⽤用存在两个框架中的"toll-free bridging"toll-free bridging意味着开发者能使⽤用这两个框架中的任何⼀一个的核⼼心基础和基础类型,例如Collection和字符串类型等。每个框架中的类和数据类型的描述注明该对象是否⽀支持toll-free bridged。如果是,它与哪个对象桥接(toll-free bridged)。

(3)CFNetwork

CFNetwork框架(CFNetwork.framework)是⼀一组⾼高性能的C语⾔言接⼜⼝口集,提供⽹网络协议的⾯面向对象的抽象。开发者可以使⽤用 CFNetwork框架操作协议栈,并且可以访问低层的结构如BSD Sockets等。同时,开发者也能简化与FTPHTTP服务器的通信,或解析DNS等任务。使⽤用CFNetwork框架实现的任务如下所⽰示:

BSD Sockets;
利⽤用
SSLTLS创建加密连接;
解析
DNS Hosts;解析HTTP协议,鉴别HTTPHTTPS服务器;在FTP服务器⼯工作;发布、解析和浏览Bonjour服务。(4)核⼼心位置框架(Core Location Framework)

核⼼心位置框架(CoreLocation.framework)主要获得⼿手机设备当前的经纬度,核⼼心位置框架利⽤用附近的GPS、蜂窝基站或Wi- Fi信号信息测量⽤用户的当前位置。iPhone地图应⽤用使⽤用这个功能在地图上显⽰示⽤用户的当前位置。开发者能融合这个技术到⾃自⼰己的应⽤用中,给⽤用户提供⼀一些位 置信息服务。例如可以提供⼀一个服务:基于⽤用户的当前位置,查找附近的餐馆、商店或设备等。

(5)安全框架(Security Framework)

iPhone OS除了内置的安全特性外,还提供了外部安全框架(Security.framework),从⽽而确保应⽤用数据的安全性。该框架提供了管理证书、公钥/私 钥对和信任策略等的接⼜⼝口。它⽀支持产⽣生加密安全的伪随机数,也⽀支持保存在密钥链的证书和密钥。对于⽤用户敏感的数据,它是安全的知识库(SecureRepository)。

CommonCrypto接⼜⼝口也⽀支持对称加密、HMAC和数据摘要。在iPhone OS⾥里没有OpenSSL库,但是数据摘要提供的功能在本质上与OpenSSL库提供的功能是⼀一致的。

(6)SQLite

iPhone应⽤用中可以嵌⼊入⼀一个⼩小型SQL数据库SQLite,⽽而不需要在远端运⾏行另⼀一个数据库服务器。开发者可以创建本地数据库⽂文件,并管理这些⽂文件中 的表格和记录。数据库SQLite为通⽤用的⽬目的⽽而设计,但仍可以优化为快速访问数据库记录。访问数据库SQLite的头⽂文件位 于/usr/include/sqlite3.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 Layer)

核⼼心OS层包含操作系统的内核环境、驱动和基本接⼜⼝口。内核基于Mac操作系统,负责操作系统的各个⽅方⾯面。它管理虚拟内存系统、线程、⽂文件系统、⽹网络和内部 通信。核⼼心OS层的驱动也提供了硬件和系统框架之间的接⼜⼝口。然⽽而,由于安全的考虑,只有有限的系统框架类能访问内核和驱动。

iPhone OS提供了许多访问操作系统低层功能的接⼜⼝口集,iPhone 应⽤用通过LibSystem库来访问这些功能,这些接⼜⼝口集如下所⽰示:

线程(POSIX线程);
⽹网络(
BSD sockets);
⽂文件系统访问;
标准
I/O;
BonjourDNS服务;区域语⾔言相关信息(Locale Information);内存分配;

数学计算。

UIKit的视图类

UIView类定义了视图的基本⾏行为,但并不定义其视觉表⽰示。相反,UIKit通过其⼦子类来为像⽂文本框、按键、及⼯工具条这样的标准界⾯面元素定义具体的外观和⾏行为。

右图显⽰示了所有UIKit视图类的层次框图。除了UIViewUIControl类是例外,这个框图中的⼤大多数视图都设计为可直接使⽤用,或者和委托对象结合使⽤用。

IOS之触摸事件和⼿手势

1 事件概述事件是当⽤用户⼿手指触击屏幕及在屏幕上移动时,系统不断发送给应⽤用程序的对象。
系统将事件按照特定的路径传递给可以对其进⾏行处理的对象。在
iOS中,⼀一个UITouch对象表⽰示⼀一个触摸,⼀一个UIEvent对象表⽰示⼀一个事件。事件对象中包含与当前多点触摸序列相对应的所有触摸对象,还可以提供与特定视图或窗⼜⼝口相关联的触摸对象。

响应者对象

响应者对象是可以响应事件并对其进⾏行处理的对象。UIResponder是所有响应者对象的基类,它不仅为事件处理,⽽而且也为常见的响应者⾏行为定义编程接⼜⼝口。UIApplicationUIView、和所有从UIView派⽣生出来的UIKit类(包括UIWindow)都直接或间接地继承⾃自UIResponder类。第⼀一响应者是应⽤用程序中当前负责接收触摸事件的响应者对象(通常是⼀一个UIView对象)。UIWindow对象以消息的形式将事件发送给第⼀一响应者,使其有机会⾸首先处理事件。如果第⼀一响应者没有进⾏行处理,系统就将事件(通过消息)传递给响应者链中的下⼀一个响应者,看看它是否可以进⾏行处理。

为了处理给定阶段的事件,响应者对象常常从传⼊入的集合参数中取得⼀一或多个UITouch 对象,然后考察这些对象的属性或取得它们的位置(如果需要处理所有触摸对象,可以向该NSSet 对象发送anyObject消息)。UITouch 类中有⼀一个名为locationInView:的重要⽅方法,如果传⼊入self 参数值,它会给出触摸动作在响应者坐标系统中的位置(假定该响应者是⼀一个UIView 对象,且传⼊入的视图参数不为nil)。另外,还有⼀一个与之平⾏行的⽅方法,可以给出触摸动作之前位置(previousLocationInView:)。UITouch 实例的属性还可以给出发⽣生多少次触碰(tapCount)、触摸对象的创建或最后⼀一次变化发⽣生在什么时间(timestamp)、以及触摸处于什么阶段(phase)。

响应者链

响应链是⼀一个响应者对象的连接序列,事件或动作消息(或菜单编辑消
息)依次传递。它允许响应者对象把事件处理的职责转交给其它更⾼高层的
对象。应⽤用程序通过向上传递⼀一个事件来查找合适的处理对象。因为点击
检测视图也是⼀一个响应者对象,应⽤用程序在处理触摸事件时也可以利⽤用响
应链。响应链由⼀一系列的下⼀一个响应者组成。

响应者链处理原则

1. 点击检测视图或者第⼀一响应者传递事件或动作消息给它的视图控制器(如果它有的话);如果没有⼀一个视图控制器,就传递给它的⽗父视图。
2. 如果⼀一个视图或者它的视图控制器不能处理这个事件或动作消息,它将传递给该视图的⽗父视图。

3. 在这个视图层次中的每个后续的⽗父视图遵循上述的模式,如果它不能处理这个事件或动作消息的话。
4. 最顶层的视图如果不能处理这个事件或动作消息,就传递给UIWindow对象来处理。

5. 如果UIWindow 对象不能处理,就传给单件应⽤用程序对象UIApplication。如果应⽤用程序对象也不能处理这个事件或动作消息,将抛弃它。

2 触摸事件触摸信息有时间和空间两⽅方⾯面,时间⽅方⾯面的信息称为阶段(phrase),表⽰示触摸是否刚刚开始、是否正在移动或处于静⽌止状态,以及何时结束也就是⼿手指何时从屏幕抬起。触摸信息还包括当前在视图或窗⼜⼝口中的位置信息,以及之前的位置信息(如果有的话)。当⼀一个⼿手指接触屏幕时,触摸就和某个窗⼜⼝口或视图关联在⼀一起,这个关联在事件的整个⽣生命周期都会得到维护。
触摸事件的阶段

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;

当⼿手指接触屏幕时,就会调⽤用touchesBegan:withEvent⽅方法;当⼿手指在屏幕上移时,动就会调⽤用touchesMoved:withEvent⽅方法;当⼿手指离开屏幕时,就会调⽤用touchesEnded:withEvent⽅方法;当触摸被取消,就会调⽤用touchesCancelled:withEvent⽅方法。

上⾯面这些⽅方法都和特定的触摸阶段(⽐比如UITouchPhaseBegan)相关联,该信息存在于UITouch 对象的phase 属性声明中。

上⾯面的四个事件⽅方法,在开发过程中并不要求全部实现,可以根据需要重写特定的⽅方法。对于这4个⽅方法,都有两个相同的参数:NSSet类型的touchesUIEvent类型的event。其中touches表⽰示触摸产⽣生的所有UITouch对象,⽽而event表⽰示特定的事件。因为UIEvent包含了整个触摸过程中所有的触摸对象,因此可以调⽤用allTouches⽅方法获取该事件内所有的触摸对象,也可以调⽤用touchesForVIew:或者touchesForWindows:取出特定视图或者窗⼜⼝口上的触摸对象。在这⼏几个事件中,都可以拿到触摸对象,然后根据其位置,状态,时间属性做逻辑处理

touch.phase,触摸事件的阶段。touch.tapCount,触摸事件的轻碰次数,可以判断双击事件。UIEvent allTouches⽅方法,可以获得触摸点的集合,可以判断多点触摸事件。

3 ⼿手势
单碰击
双碰击多点触摸(合拢和展开)轻抚

......实例.单碰击为红⾊色,双碰击为蓝⾊色

[selfperformSelector:@selector(turnRed) withObject:nilafterDelay:0.10f]; 是在0.1秒后调⽤用turnRed⽅方法。
[[selfclass]cancelPreviousPerformRequestsWithTarget:selfselector:@selector(turnRed)object:nil]; 是取消调⽤用⽅方法turnRed

多点触摸(合拢和展开)PinchZoom轻抚
..... 



你可能感兴趣的:(IOS)