亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

但是,這樣有個(gè)問(wèn)題,就是在一個(gè)頁(yè)面不同tab時(shí),也需要滑動(dòng)切換,滑動(dòng)返回。

由于scrollView的滑動(dòng)手勢(shì)攔截了事件,那我重寫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 < “這個(gè)自己設(shè)定" && self.contentOffset.x <= 0) {
          return YES;
       }
     }
   }
   return NO;

}

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

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

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

}

第二種方法:

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

   return NO; 
}

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

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

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

相關(guān)文章

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

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

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

    IOS 多線程GCD詳解

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

    iOS 定制多樣式二維碼

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論