iOS手勢 總結歸納

2021-07-23 16:58:31 字數 2418 閱讀 9659

1.單擊雙擊共存的**

uitapgesturerecognizer *singletap = [[uitapgesturerecognizer alloc] initwithtarget:self action:@selector(singletap)];

//雙擊

uitapgesturerecognizer *doubletap = [[uitapgesturerecognizer alloc] initwithtarget:self action:@selector(doubletap)];

[doubletap setnumberoftapsrequired:2];

[self.view addgesturerecognizer:singletap];

[self.view addgesturerecognizer:doubletap];

[singletap requiregesturerecognizertofail:doubletap];

2.滑動相關手勢

uiswipegesturerecognizer * swipeges = [[uiswipegesturerecognizer alloc] initwithtarget:self action:@selector(recog)];

[swipeges setdirection:uiswipegesturerecognizerdirectionup];

[self.view addgesturerecognizer:swipeges];

uiswipegesturerecognizer通常用作滑動,優點是**簡單,系統自動判斷滑動方向。缺點是不能持續觸發,有時不方便使用。

通常,有時也用uipangesturerecognizer實現滑動手勢,好處是能隨著手指在螢幕上移動而持續觸發滑動的相關事件,在事件中持續獲得滑動的相應引數,可以實現連續控制。由於比較複雜,放在最後的demo 中

3.其他手勢

其他手勢不在一一總結,簡述如下:

uipinchgesturerecognizer(捏合)

uirotationgesturerecognizer(旋轉)

uilongpressgesturerecognizer(長按)

長按很簡單,捏合和旋轉暫時沒有用過,最後補充一段簡單的**。

ps1:

controlview中如下:

①三個全域性變數的手勢,其中,_pan處理所有的滑動,待會仔細介紹。另外倆分別處理單擊,雙擊。還有三個變數是控制觸發頻率的全域性變數,稍後介紹。

cgpoint _begintouchpoint;

slidedirect _direct;

nsinteger _currentdegree;   

uipangesturerecognizer * _panges;

uitapgesturerecognizer * _singletapges;

uitapgesturerecognizer * _doubletapges;

②初始化這三個手勢並新增到檢視中。單擊雙擊比較簡單,主要是滑動模組,需要自己判斷滑動方向,距離大小

- (void)initgesture

觸發的時間

- (void)handlepan:(uipangesturerecognizer *)sender

case uigesturerecognizerstatechanged:

else if (degree < 0.6)

}if (_direct == slidedirectnone)

//已判斷出當前方向,則進行方法的呼叫

switch (_direct) else

}break;

case slidedirectdown:

else

}break;

case slidedirectleft:

break;

case slidedirectright:

break;

default:

break;}}

break;

case uigesturerecognizerstateended:

_direct = slidedirectnone;

_currentdegree = 1;

}break;

default:

break;}}

- (void)gestureslideges:(gestype)ges degre:(cgfloat )degre

_currentdegree ++;

if ([self.basedelegate respondstoselector:@selector(recogges:degree:)])

}ps2:

手勢的狀態,

typedef ns_enum(nsinteger, uigesturerecognizerstate) ;

IOS手勢處理

ios中觸控事件一般是多點觸控事件,加速計事件 翻譯不太好 遠端控制事件。在ios中大量的手勢識別蘋果都已經給我們處理好了他們都在uikit中,例如uicontrol的子類uibutton,uislider已經做好了手勢的識別。觸碰button能夠觸發事件,滑動slider觸發事件。在ios中的大部...

IOS手勢處理

ios中觸控事件一般是多點觸控事件,加速計事件 翻譯不太好 遠端控制事件。在ios中大量的手勢識別蘋果都已經給我們處理好了他們都在uikit中,例如uicontrol的子類uibutton,uislider已經做好了手勢的識別。觸碰button能夠觸發事件,滑動slider觸發事件。在ios中的大部...

iOS 手勢識別

首先給大家解釋一下為什麼要學習手勢識別?如果想監聽乙個uiview上面的觸控事件,之前的做法是 自定義乙個uiview 實現uiview的touches方法,在方法裡面實現具體功能 透過touches監聽uiview的觸控事件,有很明顯的幾個缺點 1.必須要自定義uiview,2.由於是在view內...