转自: http://book.51cto.com/art/201110/297453.htm


4.2.2 iOS多点触摸与手势

iOS赋予用户至少3.5英寸的宽广视野,在当时可谓令人眼前一亮。在这不大不小的舞台上,手指可以灵活地跳动,而在此之前,传统的触屏手机都只能用单指,而且很多都是电阻屏。但是自从iOS 横空出世之后,一切都改变了。

1)多点触摸

iOS彻底打破了传统手机的操作模式,多点触摸使之更为人性化。多点触摸的实现代码如下:

1. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{  
2. numTouches
3. }


上述方法传递一个NSSet实例与一个UIEvent实例,可以通过获取touches参数中的对象来确定当前有多少根手指触摸,touches中的每个对象都是一个UITouch事件,表示一个手指正在触摸屏幕。倘若该触摸是一系列轻击的一部分,则还可以通过询问任何UITouch对象来查询相关的属性。

同鼠标操作一样,iOS也可以有单击、双击甚至更多类似的操作,有了这些,在这个有限大小的屏幕上,可以完成更多的功能。正如上文所述,通过访问它的touches属性来查询:

1. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{  
2. numTaps
3. }


2)手势

手势是指从一个或多个手指接触屏幕开始,到手指离开屏幕为止所发生的所有事件。无论这个过程耗时多长,只要还有手指停留在屏幕上,就处于某个手势之中,除非发生意外情况。

有了手势之后,屏幕才可以感应到我们的手在做什么动作。很多场合,一些控件已经能够支持双指拉开放大、捏合缩小的动作,图片的多指旋转功能灵活、方便,符合我们的生活习惯,诸如此类的功能都是多指技术应用于现实的最好证明。可以通过以下方式检测手势:

1. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{  
2.     If ([touches count]==2) { // 检测触摸点个数  
3. twoTouches
4. first
5. second
6. CGFloat initialDistance = distanceBetweenPoints(  
7. [first locationInView:self.view],[second 
locationInView:self.view]);  // 计算两个触摸点之间的距离  
8. }  
9. }


iPhone iOS 4.x可以通过设置开启屏幕的缩放功能:三指连按两次便可切换放大,在放大的情况下还可以通过三指来移动屏幕;再次三指连按两次便可恢复正常状态。

iPad iOS 4.3已经可以支持四指操作,通过各种手势,可以实现诸多以前无法实现的效果:四指向上滑动可以显示后台运行的程序;四指向左滑动可以向左切换已打开的程序,四指向右滑动则可以向右切换已打开的程序;在程序打开的情况下,四指捏合可以关闭当前程序。