苹果在最新发布的Macbook Air中,应用了最新的触摸板,这种触摸板实现了广为好评的iPhone中的多点触摸MultiTouch技术,你可以用两根或者三根手指在触摸板上做出叫做手势(Gestures)的动作,程序可以对你的动作进行诸如缩放、旋转、翻页等响应。而在未来,新的Macbook Pro也将带有这种全新的触摸板。

不过虽然触摸板硬件本身带有这种技术,不过目前也只有少量苹果随机自带的程序支持多点触摸功能。那么如何在你自己的应用程序中也加入这种全新体验的功能,就是本文讨论的课题。

 

需要注意本文的API并不存在于苹果的任何文档中,属于苹果的私有API。苹果在未来一定会提供多点触摸的相关API,本文所提及的内容可能在未来不再被支持或是有所变化。

方法

NSResponder中提供了三个新增加的方法用于实现MultiTouch:

 

-(void)magnifyWithEvent:(NSEvent *)anEvent

 

-(void)rotateWithEvent:(NSEvent *)anEvent

 

-(void)swipeWithEvent:(NSEvent *)anEvent

 

和获取鼠标点击消息一样,你只需要在自己的程序中实现这三个方法就可以获得MultiTouch的手势消息。

 

NSEvent增加了-(BOOL)isGesture 属性,可以用于获知是否为鼠标手势。

 

属性

 

各个方法中的NSEvent包含的属性如下:

 

-(void)magnifyWithEvent:(NSEvent *)anEvent

 

这个方法用于缩放手势,就是两个手指同时在触摸板上向对角线划动,即可产生包含如下消息的属性:

 

 

-(float)deltaZ 

返回浮点值,这个数值将对应于NSEvent中的-(float)standardMagnificationThreshold,用于获知放大还是缩小。

 

-(void)rotateWithEvent:(NSEvent *)anEvent

 

这个方法用于旋转手势,就是两个手指同时在触摸板上旋转,即可产生包含如下消息的属性:

 

 

-(float)rotation

返回浮点值,这个数值将对应于NSEvent中的-(float)standardRotationThreshold,用于获知旋转的角度。

 

-(void)swipeWithEvent:(NSEvent *)anEvent

 

这个方法用于翻页手势,用三个手指向左或向右划动,即可产生包含如下消息的属性:

 

 

-(float)deltaX

 

-(float)deltaY

 

这两个值的取值范围在-1.0至1.0之间。分别用于判断上下划动还是左右划动。

 

特点

上面提供的API的最简单的用法就是在你自己的NSView subclass里直接实现。

苹果尚未公开这些API的原因可能主要是由于这些都是预先设置好的功能(缩放、旋转、划动),而开发者无法自己定制个性化的多点触摸手势。好处是非常简单,你只要在自己的程序中实现这些就可以得到响应的消息。而且因为不是调用这些方法,而是直接实现这些方法,即使这些方法在未来不再支持,或是你的程序在其他不带有MultiTouch触摸板的苹果电脑上运行,也仅仅是缺少了这些功能,你的程序本身并不会出错。

 

如果希望了解更多此方面的内容,您可以阅读这篇文章。

 

本文例子下载