欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS開發(fā)之手勢識別

 更新時(shí)間:2016年04月28日 08:55:09   作者:執(zhí)著丶執(zhí)念  
本文給大家匯總介紹了在IOS開發(fā)中我們經(jīng)常需要用到的手勢識別的相關(guān)知識,非常的細(xì)致全面,有需要的小伙伴可以參考下

一、UIGestureRecognizer簡單介紹

我們已經(jīng)學(xué)習(xí)了觸摸事件處理,但觸摸事件處理起來很麻煩,每個(gè)觸摸事件處理都需要實(shí)現(xiàn)3個(gè)touches方法,比較繁瑣,實(shí)際上我們可以使用更加簡單的觸摸事件處理操作,那就是 手勢識別UIGestureRecognizer 。

手勢識別操作基類UIGestureRecognizer不能直接使用,我們常使用的是它的子類,這些手勢操作類都繼承自UIGestureRecognizer類

常用手勢識別子類:

點(diǎn)按手勢 UITapGestureRecognizer
捏合手勢 UIPinchGestureRecognizer
拖動(dòng)手勢 UIPanGestureRecognizer
輕掃手勢 UISwipeGestureRecognizer【4個(gè)方向分離】
旋轉(zhuǎn)手勢 UIRotationGestureRecognizer
長按手勢 UILongPressGestureRecognizer

二、UIGestureRecognizer屬性

對象屬性:

復(fù)制代碼 代碼如下:

@property (nonatomic , readonly) UIGestureRecognizerState state;/*< 手勢狀態(tài) */
@property (nonatomic , getter=isEnabled) BOOL enabled;/*< 手勢是否可用 */
@property (nonatomic , readonly) UIView *view;/*< 觸發(fā)手勢的視圖 */
@property (nonatomic , assign) BOOL delaysTouchesBegan;/*< 手勢識別失敗前不執(zhí)行觸摸開始事件,默認(rèn)為NO */

手勢識別狀態(tài)state:

復(fù)制代碼 代碼如下:

typedef NS_ENUM(NSInteger, UIGestureRecognizerState) {
    UIGestureRecognizerStatePossible,   // 尚未識別是何種手勢操作(但可能已經(jīng)觸發(fā)了觸摸事件),默認(rèn)狀態(tài)
    UIGestureRecognizerStateBegan,      // 手勢已經(jīng)開始,此時(shí)已經(jīng)被識別,但是這個(gè)過程中可能發(fā)生變化,手勢操作尚未完成
    UIGestureRecognizerStateChanged,    // 手勢狀態(tài)發(fā)生轉(zhuǎn)變
    UIGestureRecognizerStateEnded,      // 手勢識別操作完成(此時(shí)已經(jīng)松開手指)
    UIGestureRecognizerStateCancelled,  // 手勢被取消,恢復(fù)到默認(rèn)狀態(tài)
    UIGestureRecognizerStateFailed,     // 手勢識別失敗,恢復(fù)到默認(rèn)狀態(tài)
    UIGestureRecognizerStateRecognized = UIGestureRecognizerStateEnded // 手勢識別完成,同UIGestureRecognizerStateEnded
};

左圖為 短手勢 的狀態(tài)轉(zhuǎn)變,右圖為 長手勢 的狀態(tài)轉(zhuǎn)變

三、UIGestureRecognizer方法

復(fù)制代碼 代碼如下:

#pragmX mark 添加觸摸執(zhí)行事件
- (void)addTarget:(id)target action:(SEL)action;
#pragma mark 移除觸摸執(zhí)行事件
- (void)removeTarget:(id)target action:(SEL)action;
#pragma mark 觸摸點(diǎn)的個(gè)數(shù)(同時(shí)觸摸的手指數(shù))
- (NSUInteger)numberOfTouches;
#pragma mark 在指定視圖中的相對位置
- (CGPoint)locationInView:(UIView*)view;
#pragma mark 觸摸點(diǎn)相對于指定視圖的位置
- (CGPoint)locationOfTouch:(NSUInteger)touchIndex inView:(UIView*)view;
#pragma mark 指定一個(gè)手勢需要另一個(gè)手勢執(zhí)行失敗才會執(zhí)行
- (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer;

四、UIGestureRecognizer使用

復(fù)制代碼 代碼如下:

# 創(chuàng)建手勢識別器對象
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
# 設(shè)置手勢識別器對象的具體屬性
tap.numberOfTapsRequired = 2;  // 連續(xù)敲擊2次
tap.numberOfTouchesRequired = 2;// 需要2根手指一起敲擊 
# 添加手勢識別器到對應(yīng)的view上
[self.myView addGestureRecognizer:tap];
# 監(jiān)聽手勢的觸發(fā)
[tap addTarget:self action:@selector(tapView:)];

五、多手勢沖突

在iOS中,如果一個(gè)手勢A的識別部分是另一個(gè)手勢B的子部分,默認(rèn)情況下A就會先識別,B就無法識別了,

比如拖動(dòng)手勢A和輕掃手勢B,輕掃手勢只在手勢結(jié)束狀態(tài)才能執(zhí)行,而拖動(dòng)手勢在手勢開始的時(shí)候執(zhí)行,這兩個(gè)手勢一起觸發(fā),輕掃手勢就成了犧牲品。

解決手勢沖突,就是利用一個(gè)方法:

復(fù)制代碼 代碼如下:

-(void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer

該方法指定一個(gè)手勢需要另外一個(gè)手勢識別失敗才會執(zhí)行

比如解決拖動(dòng)手勢和輕掃手勢沖突:

復(fù)制代碼 代碼如下:

// 拖動(dòng)手勢的執(zhí)行需要右輕掃手勢的失敗為前提
[panGesture requireGestureRecognizerToFail:swipeGestureToRight];
// 拖動(dòng)手勢的執(zhí)行需要左輕掃手勢的失敗為前提
[panGesture requireGestureRecognizerToFail:swipeGestureToLeft];

六、UIGestureRecognizerDelegate代理

代理方法:

復(fù)制代碼 代碼如下:

#pragma mark 一個(gè)控件識別手勢后是否沿著響應(yīng)者鏈條繼續(xù)傳播手勢識別,默認(rèn)返回NO
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

用該代理方法可以實(shí)現(xiàn)兩個(gè)不同控件的手勢同時(shí)執(zhí)行,需要讓該方法返回YES,手勢識別就能傳遞給不同控件

相關(guān)文章

  • iOS中UIAlertController設(shè)置自定義標(biāo)題與內(nèi)容的方法

    iOS中UIAlertController設(shè)置自定義標(biāo)題與內(nèi)容的方法

    UIAlertController是iOS8推出的新概念,取代了之前的 UIAlertView和UIActionSheet(雖然現(xiàn)在仍可以使用,但是會有警告)。下面這篇文章主要給大家介紹了關(guān)于iOS中UIAlertController如何設(shè)置自定義標(biāo)題與內(nèi)容的相關(guān)資料,需要的朋友可以參考下。
    2017-10-10
  • iOS實(shí)現(xiàn)多個(gè)垂直滑動(dòng)條并列視圖

    iOS實(shí)現(xiàn)多個(gè)垂直滑動(dòng)條并列視圖

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)多個(gè)垂直滑動(dòng)條并列視圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 值得收藏的iOS開發(fā)常用代碼塊

    值得收藏的iOS開發(fā)常用代碼塊

    這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)常用代碼塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • IOS生成與讀取二維碼名片

    IOS生成與讀取二維碼名片

    這篇文章主要為大家介紹了IOS生成與讀取二維碼名片的方法,感興趣的小伙伴們可以參考一下
    2016-01-01
  • iOS中tableview 兩級cell的展開與收回的示例代碼

    iOS中tableview 兩級cell的展開與收回的示例代碼

    本篇文章主要介紹了iOS中tableview 兩級cell的展開與收回的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • 詳解iOS應(yīng)用使用Storyboard布局時(shí)的IBOutlet與IBAction

    詳解iOS應(yīng)用使用Storyboard布局時(shí)的IBOutlet與IBAction

    這篇文章主要介紹了iOS應(yīng)用使用Storyboard布局時(shí)的IBOutlet與IBAction,文中還附帶講解了為什么IBOutlet屬性是weak的,需要的朋友可以參考下
    2016-04-04
  • iOS獲取設(shè)備唯一標(biāo)識的實(shí)現(xiàn)步驟

    iOS獲取設(shè)備唯一標(biāo)識的實(shí)現(xiàn)步驟

    這篇文章主要介紹了iOS獲取設(shè)備唯一標(biāo)識的實(shí)現(xiàn)步驟,幫助大家更好的理解和學(xué)習(xí)ios開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • UILabel顯示定時(shí)器文本跳動(dòng)問題的解決方法

    UILabel顯示定時(shí)器文本跳動(dòng)問題的解決方法

    這篇文章主要給大家介紹了關(guān)于UILabel顯示定時(shí)器文本跳動(dòng)問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • iOS NSTimer循環(huán)引用的辦法

    iOS NSTimer循環(huán)引用的辦法

    這篇文章主要介紹了iOS NSTimer循環(huán)引用的辦法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • iOS中多網(wǎng)絡(luò)請求的線程安全詳解

    iOS中多網(wǎng)絡(luò)請求的線程安全詳解

    這篇文章主要給大家介紹了關(guān)于iOS中多網(wǎng)絡(luò)請求的線程安全的相關(guān)資料文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10

最新評論