iOS scrollview 嵌套滑動(dòng)沖突的處理

最近公司需要實(shí)現(xiàn)多個(gè)scrollView的聯(lián)動(dòng)處理气筋,遇到了滑動(dòng)手勢(shì)的沖突問(wèn)題,現(xiàn)將幾個(gè)關(guān)鍵點(diǎn)記錄

首先看下UIGestureRecognizerDelegate的代理方法

// called when the recognition of one of gestureRecognizer or otherGestureRecognizer would be blocked by the other
// return YES to allow both to recognize simultaneously. the default implementation returns NO (by default no two gestures can be recognized simultaneously)
//
// note: returning YES is guaranteed to allow simultaneous recognition. returning NO is not guaranteed to prevent simultaneous recognition, as the other gesture's delegate may return YES
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

是否支持多手勢(shì)觸發(fā)待诅,返回YES,則可以多個(gè)手勢(shì)一起觸發(fā)方法懊蒸,返回NO則為互斥

如果tableView中放置了一個(gè)collectionView,自定義tableView的子類(lèi)测秸,可在實(shí)現(xiàn)文件中如下設(shè)置

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    if ([self checkIsNestContentScrollView:(UIScrollView *)gestureRecognizer.view] || [self checkIsNestContentScrollView:(UIScrollView *)otherGestureRecognizer.view]) {
        //如果交互的是嵌套的contentScrollView,證明在左右滑動(dòng)系宜,就不允許同時(shí)響應(yīng)
        return NO;
    }
    return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
}
- (BOOL)checkIsNestContentScrollView:(UIScrollView *)scrollView
{
    for (GCGiftContentView *listView in self.pagerView.validListDict.allValues) {
        if (listView.collectionView == scrollView) {
            return YES;
        }
    }
    return NO;
}

手勢(shì)滑動(dòng)屏幕需要獲取手指滑動(dòng)方向的解決方案
在scrollView的子類(lèi)中實(shí)現(xiàn)

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
   if ([gestureRecognizer isMemberOfClass:NSClassFromString(@"UIScrollViewPanGestureRecognizer")]) {
            CGFloat velocityX = [(UIPanGestureRecognizer *)gestureRecognizer velocityInView:gestureRecognizer.view].x;
            CGFloat velocityY = [(UIPanGestureRecognizer *)gestureRecognizer velocityInView:gestureRecognizer.view].y;
            if (velocityX > 0) {
                //x大于0就是往右滑
            } else if (velocityX < 0) {
                //x小于0就是往左滑
            }
            if (velocityY > 0) {
                // y大于0就是手指從下往上滑
            } else {
                // y大于0就是手指從上往下滑
            }
        }
    return YES;
}

其中 用于獲取手指在屏幕上的滑動(dòng)速度 單位是points/second

// velocity of the pan in points/second in the coordinate system of the specified view
- (CGPoint)velocityInView:(nullable UIView *)view;                           

以上方法只能在手勢(shì)剛開(kāi)始觸發(fā)時(shí)獲取即將滑動(dòng)的方向照激,如果手指貼著屏幕一直不松手,此時(shí)結(jié)束時(shí)會(huì)回調(diào)此代理

// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

decelerate == NO 手指松開(kāi)后UI不再滑動(dòng),此時(shí)不回調(diào) scrollViewDidEndDecelerating
decelerate == YES 手指松開(kāi)后UI慣性滑動(dòng)一段距離,滑動(dòng)結(jié)束回調(diào) scrollViewDidEndDecelerating

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盹牧,一起剝皮案震驚了整個(gè)濱河市俩垃,隨后出現(xiàn)的幾起案子励幼,更是在濱河造成了極大的恐慌,老刑警劉巖口柳,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苹粟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡跃闹,警方通過(guò)查閱死者的電腦和手機(jī)嵌削,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)望艺,“玉大人掷贾,你說(shuō)我怎么就攤上這事∪倜#” “怎么了想帅?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)啡莉。 經(jīng)常有香客問(wèn)我港准,道長(zhǎng),這世上最難降的妖魔是什么咧欣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任浅缸,我火速辦了婚禮,結(jié)果婚禮上魄咕,老公的妹妹穿的比我還像新娘衩椒。我一直安慰自己,他們只是感情好哮兰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布祈争。 她就那樣靜靜地躺著,像睡著了一般砌溺。 火紅的嫁衣襯著肌膚如雪潦刃。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天右遭,我揣著相機(jī)與錄音做盅,去河邊找鬼。 笑死窘哈,一個(gè)胖子當(dāng)著我的面吹牛吹榴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滚婉,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼图筹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了满哪?” 一聲冷哼從身側(cè)響起婿斥,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤劝篷,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后民宿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體娇妓,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年活鹰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哈恰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡志群,死狀恐怖着绷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锌云,我是刑警寧澤荠医,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站桑涎,受9級(jí)特大地震影響彬向,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攻冷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一娃胆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧等曼,春花似錦里烦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至枷畏,卻和暖如春别厘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拥诡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氮发,地道東北人渴肉。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像爽冕,于是被迫代替她去往敵國(guó)和親仇祭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多颈畸,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1乌奇,想要解決就用__block...
    炙冰閱讀 2,485評(píng)論 1 14
  • 一没讲、簡(jiǎn)介 <<繼承關(guān)系:UIScrollView --> UIView-->UIResponder-->NSObj...
    無(wú)邪8閱讀 1,859評(píng)論 0 0
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,097評(píng)論 1 32
  • 今天講講測(cè)試工程師的培養(yǎng)。最近筆者聽(tīng)聞其他團(tuán)隊(duì)的認(rèn)為技術(shù)能力比較強(qiáng)的工程師在現(xiàn)有團(tuán)隊(duì)呆的并不開(kāi)心礁苗,而他的lea...
    笨笨不笨1閱讀 619評(píng)論 2 7
  • 文/一刀齋 【六】《?? ??》李承煥 《請(qǐng)回答1988》之所以讓人陷入無(wú)盡的感懷爬凑,可能是它切切實(shí)實(shí)契合了大部分人...
    一刀齋閱讀 431評(píng)論 0 0