一牢贸、概述
iPhone中處理觸摸屏的操作嘹叫,在3.2之前是主要使用的是由UIResponder而來的如下4種方式:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
但是這種方式甄別不同的手勢操作實在是麻煩揭绑,需要你自己計算做不同的手勢分辨帜乞。后來搀玖。莉炉。豌拙。
蘋果就給出了一個比較簡便的方式陕悬,就是使用UIGestureRecognizer。
二按傅、UIGestureRecognizer
UIGestureRecognizer基類是一個抽象類捉超,我們主要是使用它的子類(名字包含鏈接,可以點(diǎn)擊跳到ios Developer library唯绍,看官方文檔):
UITapGestureRecognizer
UIPinchGestureRecognizer
UIRotationGestureRecognizer
UISwipeGestureRecognizer
UIPanGestureRecognizer
UILongPressGestureRecognizer
從名字上我們就能知道拼岳, Tap(點(diǎn)擊)、Pinch(捏合)况芒、Rotation(旋轉(zhuǎn))惜纸、Swipe(滑動,快速移動绝骚,是用于監(jiān)測滑動的方向的)耐版、Pan (拖移,慢速移動压汪,是用于監(jiān)測偏移的量的)以及 LongPress(長按)粪牲。
舉個例子,可以在viewDidLoad函數(shù)里面添加:
-(void) viewDidLoad
{
[super?viewDidLoad];
//?Do?any?additional?setup?after?loading?the?view?from?its?nib.
UIPanGestureRecognizer?*panRecognizer?=?[[UIPanGestureRecognizer?alloc]?initWithTarget:self?action:@selector(handlePanFrom:)];
[self.view?addGestureRecognizer:panRecognizer];//關(guān)鍵語句止剖,給self.view添加一個手勢監(jiān)測腺阳;
panRecognizer.maximumNumberOfTouches?=?1;
panRecognizer.delegate?=?self;
}
其它手勢方法類似。其核心就是設(shè)置delegate和在需要手勢監(jiān)測的view上使用addGestureRecognizer添加指定的手勢監(jiān)測穿香。當(dāng)然要記得在作為delegate的view的頭文件加上亭引。
不過有些手勢是關(guān)聯(lián)的,怎么辦呢扔水?例如 Tap 與 LongPress痛侍、Swipe與 Pan朝氓,或是 Tap 一次與Tap 兩次魔市。
手勢識別是具有互斥的原則的主届,比如單擊和雙擊,如果它識別出一種手勢待德,其后的手勢將不被識別君丁。所以對于關(guān)聯(lián)手勢,要做特殊處理以幫助程序甄別将宪,應(yīng)該把當(dāng)前手勢歸結(jié)到哪一類手勢里面绘闷。
比如,單擊和雙擊并存時较坛,如果不做處理印蔗,它就只能發(fā)送出單擊的消息。為了能夠識別出雙擊手勢丑勤,就需要做一個特殊處理邏輯华嘹,即先判斷手勢是否是雙擊,在雙擊失效的情況下作為單擊手勢處理法竞。使用
[A requireGestureRecognizerToFail:B]函數(shù)耙厚,它可以指定當(dāng)A手勢發(fā)生時,即便A已經(jīng)滿足條件了岔霸,也不會立刻觸發(fā)薛躬,會等到指定的手勢B確定失敗之后才觸發(fā)。
- (void)viewDidLoad
{
//?單擊的?Recognizer
UITapGestureRecognizer*?singleRecognizer;
singleRecognizer?=?[[UITapGestureRecognizer?alloc]?initWithTarget:selfaction:@selector(SingleTap:)];
//點(diǎn)擊的次數(shù)
singleTapRecognizer.numberOfTapsRequired?=?1;//?單擊
//給self.view添加一個手勢監(jiān)測呆细;
[self.view?addGestureRecognizer:singleRecognizer];
//?雙擊的?Recognizer
UITapGestureRecognizer*?doubleRecognizer?=?[[UITapGestureRecognizer?alloc]?initWithTarget:selfaction:@selector(DoubleTap:)];
doubleRecognizer.numberOfTapsRequired?=?2;//?雙擊
//關(guān)鍵語句型宝,給self.view添加一個手勢監(jiān)測;
[self.view?addGestureRecognizer:doubleRecognizer];
//?關(guān)鍵在這一行絮爷,雙擊手勢確定監(jiān)測失敗才會觸發(fā)單擊手勢的相應(yīng)操作
[singleRecognizer?requireGestureRecognizerToFail:doubleRecognizer];
}
-(void)SingleTap:(UITapGestureRecognizer*)recognizer
{
//處理單擊操作
}
-(void)DoubleTap:(UITapGestureRecognizer*)recognizer
{
//處理雙擊操作
}
三诡曙、iphone操作手勢的大概種類
1.點(diǎn)擊(Tap)
點(diǎn)擊作為最常用手勢,用于按下或選擇一個控件或條目(類似于普通的鼠標(biāo)點(diǎn)擊)略水、
2.拖動(Drag)
拖動用于實現(xiàn)一些頁面的滾動价卤,以及對控件的移動功能。
3.滑動(Flick)
滑動用于實現(xiàn)頁面的快速滾動和翻頁的功能渊涝。
4.橫掃(Swipe)
橫掃手勢用于激活列表項的快捷操作菜單
5.雙擊(Double Tap)
雙擊放大并居中顯示圖片慎璧,或恢復(fù)原大小(如果當(dāng)前已經(jīng)放大)跨释。同時胸私,雙擊能夠激活針對文字編輯菜單。
6.放大(Pinch open)
放大手勢可以實現(xiàn)以下功能:打開訂閱源鳖谈,打開文章的詳情岁疼。在照片查看的時候,放大手勢也可實現(xiàn)放大圖片的功能缆娃。
7.縮小(Pinch close)
縮小手勢捷绒,可以實現(xiàn)與放大手勢相反且對應(yīng)的功能的功能:關(guān)閉訂閱源退出到首頁瑰排,關(guān)閉文章退出至索引頁。在照片查看的時候暖侨,縮小手勢也可實現(xiàn)縮小圖片的功能椭住。
8.長按(Touch &Hold)
在我的訂閱頁,長按訂閱源將自動進(jìn)入編輯模式字逗,同時選中手指當(dāng)前按下的訂閱源京郑。這時可直接拖動訂閱源移動位置。
針對文字長按葫掉,將出現(xiàn)放大鏡輔助功能些举。松開后,則出現(xiàn)編輯菜單俭厚。
針對圖片長按金拒,將出現(xiàn)編輯菜單。
9.搖晃(Shake)
搖晃手勢套腹,將出現(xiàn)撤銷與重做菜單绪抛。主要是針對用戶文本輸入的。