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

右滑返回手勢和UIScrollView中手勢沖突的解決方法

 更新時間:2017年02月25日 08:54:40   作者:jgCho  
這篇文章主要為大家詳細(xì)介紹了右滑返回手勢和UIScrollView中手勢沖突的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

項目中遇到一個頁面中是以一個scrollview橫向Tab展示兩個不同功能的顯示,譬如消息和公告功能,但是由于滑動返回手勢和scrollview的滑動返回手勢沖突了,導(dǎo)致頁面不再能夠滑動返回。類似的還有圖片瀏覽功能也出現(xiàn)過。

iOS系統(tǒng)中,滑動返回手勢,其實是一個UIPanGestureRecognizer,系統(tǒng)默認(rèn)的操作是只有滑動屏幕的左邊的某個位置,UIPanGestureRecognizer才會起作用。UIScrollView的滑動手勢也是UIPanGestureRecognizer。那在側(cè)邊滑動時,讓UIScrollView的不響應(yīng)事件就OK了嘛,首先想到了繼承UIScrollView 重寫下面的方法,讓滑動側(cè)邊時scrollView不響應(yīng)事件,根據(jù)響應(yīng)者鏈,事件最終會傳遞給下方的滑動手勢。

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event   {
   if (point.x < location.x) { // location.x為系統(tǒng)的某個點的x
     return nil;
   } else {
     return [super hitTest:point withEvent:event];
   }
}

但是,這樣有個問題,就是在一個頁面不同tab時,也需要滑動切換,滑動返回。

由于scrollView的滑動手勢攔截了事件,那我重寫scrollView中panGestureRecognizer的代理方法,讓它不攔截就好了嘛。于是繼承UIScrollView,重寫下面的方法。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

    if ([self panBack:gestureRecognizer]) {
       return YES;
    }
    return NO;

 }


- (BOOL)panBack:(UIGestureRecognizer *)gestureRecognizer {

  if (gestureRecognizer == self.panGestureRecognizer) {
     UIPanGestureRecognizer *pan = (UIPanGestureRecognizer *)gestureRecognizer;
     CGPoint point = [pan translationInView:self];
     UIGestureRecognizerState state = gestureRecognizer.state;
     if (UIGestureRecognizerStateBegan == state || UIGestureRecognizerStatePossible == state) {
       CGPoint location = [gestureRecognizer locationInView:self];
       if (point.x > 0 && location.x < “這個自己設(shè)定" && self.contentOffset.x <= 0) {
          return YES;
       }
     }
   }
   return NO;

}

需要側(cè)邊滑動時 panBack 返回YES,這時候,我讓scrollView的手勢和頁面的滑動返回手勢共存,scrollView不攔截手勢,那不就可以滑動返回了嗎。好了,測試一下,可以滑動返回,但是滑動返回時,為什么scrollView也跟著在滑動呢,太影響美觀了,看來還需要另外的辦法,我又回到了第一種辦法時的想法,讓scrollView切換的時候相應(yīng)panGesture,滑動返回的時候不響應(yīng),那重寫scrollView中的另外一個panGestureRecognizer的代理方法。

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

  if ([self panBack:gestureRecognizer]) {
    return NO;
  }
  return YES;

}

第二種方法:

 -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
 { 
   // 首先判斷otherGestureRecognizer是不是系統(tǒng)pop手勢 
   if ([otherGestureRecognizer.view isKindOfClass:NSClassFromString(@"UILayoutContainerView")]) { 
     // 再判斷系統(tǒng)手勢的state是began還是fail,同時判斷scrollView的位置是不是正好在最左邊 
     if (otherGestureRecognizer.state == UIGestureRecognizerStateBegan && self.contentOffset.x == 0) { 
       return YES; 
     } 
   } 

   return NO; 
}

以上的代碼都是在一個自定義的UIScrollView上的,重寫上面的方法即可。然后讓橫向滾動的scrollView繼承這個自定義UIScrollView就OK了。

原理:
scrollView的pan手勢會讓系統(tǒng)的pan手勢失效,所以我們只需要在系統(tǒng)手勢失效且scrollView的位置在初始位置的時候讓兩個手勢同時啟用就可以了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • iOS應(yīng)用內(nèi)實現(xiàn)跳轉(zhuǎn)到手機淘寶天貓的方法

    iOS應(yīng)用內(nèi)實現(xiàn)跳轉(zhuǎn)到手機淘寶天貓的方法

    這篇文章主要給大家介紹了關(guān)于iOS應(yīng)用內(nèi)如何實現(xiàn)跳轉(zhuǎn)到手機淘寶天貓的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • IOS  多線程GCD詳解

    IOS 多線程GCD詳解

    這篇文章主要介紹了IOS 多線程GCD詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • iOS 定制多樣式二維碼

    iOS 定制多樣式二維碼

    最常見的二維碼功能包括信息獲取、網(wǎng)站跳轉(zhuǎn)、電商交易、手機支付等等,其擁有密度小、信息容量大、容錯能力強、成本低、制作難度低等優(yōu)點。在移動開發(fā)中,二維碼的地位也越來越重要,掌握二維碼的基本操作是重要的本領(lǐng)之一。本文將講解iOS定制二維碼的步驟與方法。
    2017-03-03
  • ios 11和iphone x的相關(guān)適配問題及解決方法

    ios 11和iphone x的相關(guān)適配問題及解決方法

    這篇文章主要介紹了ios 11和iphone x的相關(guān)適配,文中給大家提到了在ios 11中,tableView會莫名偏移問題的解決方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • HTTP/2 協(xié)議用于 iOS 推送提醒服務(wù) (APNS)

    HTTP/2 協(xié)議用于 iOS 推送提醒服務(wù) (APNS)

    基于JSON的請求和響應(yīng)對于每個通知,如果成功響應(yīng),將會返回200標(biāo)識 - 不用再去猜測通知是否被接收到響應(yīng)錯誤將會以JSON字符消息的長度從2048個字節(jié)增加到4096個字節(jié)連接狀態(tài)可以通過HTTP/2的ping框架來進(jìn)行檢查.
    2016-04-04
  • iOS常用算法之兩個有序數(shù)組合并(要求時間復(fù)雜度為0(n))

    iOS常用算法之兩個有序數(shù)組合并(要求時間復(fù)雜度為0(n))

    這篇文章主要介紹了iOS常用算法之兩個有序數(shù)組合并(要求時間復(fù)雜度為0(n)),實現(xiàn)思路是先將一個數(shù)組作為合并后的數(shù)組, 然后遍歷第二個數(shù)組的每項元素,需要的朋友可以參考下
    2019-07-07
  • iOS App中UITableView左滑出現(xiàn)刪除按鈕及其cell的重用

    iOS App中UITableView左滑出現(xiàn)刪除按鈕及其cell的重用

    這篇文章主要介紹了iOS App中UITableView左滑出現(xiàn)刪除按鈕及其cell的重用的方法,實例代碼為傳統(tǒng)的Objective-C語言,需要的朋友可以參考下
    2016-03-03
  • iOS中關(guān)于Cookie驗證登錄狀態(tài)

    iOS中關(guān)于Cookie驗證登錄狀態(tài)

    這篇文章主要介紹了iOS中關(guān)于Cookie驗證登錄狀態(tài)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 淺析iOS中的淺拷貝和深拷貝(copy和mutableCopy)

    淺析iOS中的淺拷貝和深拷貝(copy和mutableCopy)

    ios提供了copy和mutablecopy方法,顧名思義,copy就是復(fù)制了一個imutable的對象,而mutablecopy就是復(fù)制了一個mutable的對象。本文給大家介紹iOS中的淺拷貝和深拷貝(copy和mutableCopy) ,感興趣的朋友一起看看吧
    2016-04-04
  • iOS按比例實現(xiàn)方塊圖

    iOS按比例實現(xiàn)方塊圖

    這篇文章主要為大家詳細(xì)介紹了iOS按比例實現(xiàn)方塊圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評論