iOS 下如果存在UIScrollerView 使用UIScreenEdgePanGestureRecognizer實(shí)現(xiàn)側(cè)滑效果失效的問題

當(dāng)你在使用UIScreenEdgePanGestureRecognizer手勢(shì)實(shí)現(xiàn)側(cè)滑的時(shí)候拉盾,如果后期你導(dǎo)航控制器push出的界面中包含UIScrollerView油湖,這個(gè)時(shí)候你會(huì)發(fā)現(xiàn)恳谎,側(cè)滑效果無法實(shí)現(xiàn)了隙疚,這個(gè)首先你會(huì)想到肯定是UIScrollerView,把這個(gè)手勢(shì)給攔截了楔脯,執(zhí)行了UIScrollerView中包含的手勢(shì)喇肋。

問題所在

滑動(dòng)返回事實(shí)上也是由于存在已久的UIScreenEdgePanGestureRecognizer來識(shí)別并且相應(yīng)地侣颂,它直接與UINavigationController的view進(jìn)行了綁定档桃,綁定的方法是寫在UINavgationController 的基類中的,正如一下:

UIPanGestureRecongnizer -- bind-- UIScrollerView
UIScreenEdgePanGestureRecognizer --bind-- UINavigationController.view

滑動(dòng)返回?zé)o法觸發(fā)憔晒,說明UIScreenEdgePanGestureRecongnizer并沒有接受到手勢(shì)事件藻肄。
根據(jù)蘋果的<a >官方文檔</a>說明 UIGestureRecongnizer 和UIview 是多對(duì)一的關(guān)系蔑舞,UIGestureRecognizer 一定要和UIView進(jìn)行綁定才能發(fā)揮作用,因此UIGestureRecongnizer對(duì)于屏幕上的手勢(shì)事件嘹屯,其接受順序和UIView的層次結(jié)構(gòu)是一致的攻询,如下關(guān)系

UINavgataionController.view -->UIviewController.view -- > UIScrollerView.view -->screen and user'finger 既UIScrollView的panGestureRecognizer
先接受到了手勢(shì)事件,直接就處理而沒有往下傳遞實(shí)際上就是兩個(gè)手勢(shì)共存的問題

解決方案

UIGestureRecognizerDelegate 代理方法中包含州弟,支持多個(gè)UIGestureRecongnizer共存钧栖,其中一個(gè)方法是

1 // called when the recognition of one of gestureRecognizer or otherGestureRecognizer would be blocked by the other
2 // return YES to allow both to recognize simultaneously. the default implementation returns NO (by default no two gestures can be recognized simultaneously)
3 // 
4 // 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
5 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;

總結(jié)就是此方法返回YES,手勢(shì)事件會(huì)一直往下傳遞,不論當(dāng)前層次是否對(duì)該事件進(jìn)行響應(yīng)

看看UIScrollerView的頭文件的描述:

1 // Use these accessors to configure the scroll view's built-in gesture recognizers.
2 // Do not change the gestures' delegates or override the getters for these properties.
3 @property(nonatomic, readonly) UIPanGestureRecognizer *panGestureRecognizer NS_AVAILABLE_IOS(5_0);

UIScrollView本身是其panGestureRecognizer的delegate婆翔,且apple君明確表明不能修改它的delegate(修改的時(shí)候也會(huì)有警告)

UIScrollView作為delegate拯杠,說明UIScrollView中實(shí)現(xiàn)了上文提到的shouldRecognizeSimultaneouslyWithGestureRecognizer方法,返回了NO啃奴。創(chuàng)建一個(gè)UIScrollView的category潭陪,由于category中的同名方法會(huì)覆蓋原有.m文件中的實(shí)現(xiàn),使得可以自定義手勢(shì)事件的傳遞最蕾,如下:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ 
      if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]  && [otherGestureRecognizer isKindOfClass:[UIScreenEdgePanGestureRecognizer class]]) { 
            return YES; 
      } else  {
            return NO; 
     }
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末依溯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子揖膜,更是在濱河造成了極大的恐慌誓沸,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壹粟,死亡現(xiàn)場離奇詭異拜隧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)趁仙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門洪添,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雀费,你說我怎么就攤上這事干奢。” “怎么了盏袄?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵忿峻,是天一觀的道長。 經(jīng)常有香客問我辕羽,道長逛尚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任刁愿,我火速辦了婚禮绰寞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己滤钱,他們只是感情好觉壶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著件缸,像睡著了一般铜靶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上停团,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天旷坦,我揣著相機(jī)與錄音,去河邊找鬼佑稠。 笑死秒梅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的舌胶。 我是一名探鬼主播捆蜀,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼幔嫂!你這毒婦竟也來了辆它?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤履恩,失蹤者是張志新(化名)和其女友劉穎锰茉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體切心,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡飒筑,尸身上長有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
  • 文/蒙蒙 一子刮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦挺峡、人聲如沸葵孤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尤仍。三九已至,卻和暖如春狭姨,著一層夾襖步出監(jiān)牢的瞬間宰啦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工饼拍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赡模,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓师抄,卻偏偏與公主長得像漓柑,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叨吮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 前言:ios7開始 蘋果增加了頁面 右滑返回的效果辆布;具體的是以UINavigationController為容器的...
    iPhone閱讀 3,751評(píng)論 2 3
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件茶鉴、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,093評(píng)論 4 62
  • 魔林初見 一株株高達(dá)百尺的古樹挺立涵叮,似要刺破蒼穹惭蹂,但這里卻時(shí)不時(shí)地飄出一股黑氣,給人一種陰森森的感覺围肥。這里就是出名...
    四海WX閱讀 480評(píng)論 0 0
  • 1.電影原境重現(xiàn) 成才父親臨終時(shí)說:“成才剿干,我是在被打的環(huán)境中長大,從來沒有人愛過我穆刻,所以置尔,我也不知道該怎樣愛你。...
    張浩永恒之旅閱讀 270評(píng)論 0 1
  • 入冬啦氢伟,街道上彷徨的人少了榜轿。 要么是拐進(jìn)巷子找酒喝,要么是騎著單車裹著大衣朵锣,腿還時(shí)不時(shí)撞到剛買的芹菜谬盐。總覺得叮鈴鈴...
    Deer_Elaine閱讀 168評(píng)論 0 0