轉自: http://book.51cto.com/art/201110/297453.htm
4.2.2 iOS多點觸摸與手勢
iOS賦予使用者至少3.5英寸的寬廣視野,在當時可謂令人眼前一亮。在這不大不小的舞台上,手指可以靈活地跳動,而在此之前,傳統的觸屏手機都只能用單指,而且很多都是電阻屏。但是自從iOS 橫空出世之後,一切都改變了。
1)多點觸摸
iOS徹底打破了傳統手機的操作模式,多點觸摸使之更為人性化。多點觸摸的實現代碼如下:
- -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
- NSUInteger numTouches = [touches count];
- }
上述方法傳遞一個NSSet執行個體與一個UIEvent執行個體,可以通過擷取touches參數中的對象來確定當前有多少根手指觸摸,touches中的每個對象都是一個UITouch事件,表示一個手指正在觸控螢幕幕。倘若該觸摸是一系列輕擊的一部分,則還可以通過詢問任何UITouch對象來查詢相關的屬性。
同滑鼠操作一樣,iOS也可以有單擊、雙擊甚至更多類似的操作,有了這些,在這個有限大小的螢幕上,可以完成更多的功能。正如上文所述,通過訪問它的touches屬性來查詢:
- -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
- NSUInteger numTaps = [[touches anyObject] tapCount];
- }
2)手勢
手勢是指從一個或多個手指接觸螢幕開始,到手指離開螢幕為止所發生的所有事件。無論這個過程耗時多長,只要還有手指停留在螢幕上,就處於某個手勢之中,除非發生意外情況。
有了手勢之後,螢幕才可以感應到我們的手在做什麼動作。很多場合,一些控制項已經能夠支援雙指拉開放大、捏合縮小的動作,圖片的多指旋轉功能靈活、方便,符合我們的生活習慣,諸如此類的功能都是多指技術應用於現實的最好證明。可以通過以下方式檢測手勢:
- -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
- If ([touches count]==2) { // 檢測觸摸點個數
- NSArray *twoTouches = [touches allObjects]; // 擷取觸摸點數組
- UITouch *first = [twoTouches objectAtIndex:0]; // 第一個觸摸點
- UITouch *second = [twoTouched objectAtIndex;1]; // 第二個觸摸點
- CGFloat initialDistance = distanceBetweenPoints(
- [first locationInView:self.view],[second locationInView:self.view]); // 計算兩個觸摸點之間的距離
- }
- }
iPhone iOS 4.x可以通過設定開啟螢幕的縮放功能:三指連按兩次便可切換放大,在放大的情況下還可以通過三指來移動螢幕;再次三指連按兩次便可恢複正常狀態。
iPad iOS 4.3已經可以支援四指操作,通過各種手勢,可以實現諸多以前無法實現的效果:四指向上滑動可以顯示後台啟動並執行程式;四指向左滑動可以向左切換已開啟的程式,四指向右滑動則可以向右切換已開啟的程式;在程式開啟的情況下,四指捏合可以關閉當前程式。