iOS scrollView自定義分頁大小及subViews點擊事件處理

本篇主要解決以下需求場景:


每次滾動距離 < 展示寬度

代碼結(jié)構(gòu)的設(shè)計:

1,外層UIView裹驰,用來整體封裝关摇。包含計時器屑埋、子視圖scrollView的代理方法等。
同時如果要求scrollView整體滾動展示區(qū)域設(shè)置背景色時讥蟆,由于在自定義分頁大小時勒虾,改小了scrollView的寬度。這時可以直接在外層View上操作瘸彤。
2修然,[UIView addSubview:scrollView]
3,在scrollView上根據(jù)數(shù)據(jù)源,循環(huán)創(chuàng)建UIImageView并add到scrollView上


實現(xiàn)自定義分頁大小的主要思路:

1愕宋,UIScrollView的contentSize屬性玻靡,決定整體滾動展示區(qū)域的大小

scrollView.contentSize = CGSizeMake(展示區(qū)域?qū)挾? 展示區(qū)域高度);
scrollView.pagingEnabled = YES;//啟動分頁效果

2,UIScrollView的frame寬度中贝,決定分頁page的大小囤捻,即手每滑一次,滾動的距離

scrollView.frame = 設(shè)置為實際想要分頁的寬度(小于整體展示區(qū)域?qū)挾龋?

3邻寿,設(shè)置scrollView的clipsToBounds屬性為NO:不裁剪子視圖超出父視圖的部分
屬性詳細介紹見:http://www.reibang.com/p/1f94bed28b93

scrollView.clipsToBounds = NO;

4蝎土,解決自定義分頁大小后,內(nèi)部子view 點擊事件/手勢 不響應(yīng)的問題绣否。
(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event; 系統(tǒng)的Hit-Testing方法誊涯,觸摸屏幕時,探測由哪個對象最先響應(yīng)蒜撮,決定scrollView內(nèi)部子view的點擊事件or手勢的響應(yīng)

//重寫外層UIView的觸摸手勢響應(yīng)鏈方法
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if ([self pointInside:point withEvent:event]) {
        //觸摸點在外層UIView的范圍中暴构,都優(yōu)先響應(yīng)子視圖scrollView
        return scrollView;
    }
    return nil;
}

響應(yīng)鏈、Hit-Testing段磨,詳細介紹:http://www.reibang.com/p/77139b374313?open_source=weibo_search
【注意取逾!】如果scrollView中,每個UIImageView都有點擊跳轉(zhuǎn)事件苹支,則要轉(zhuǎn)換相對坐標系砾隅,加多一層判斷:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if ([self pointInside:point withEvent:event]) {
        for (UIView *view in self.adScrollView.subviews) {
            //轉(zhuǎn)換坐標系為imageView,進行對比
            CGPoint pointInImageView = [self convertPoint:point toView:view];
            if ([view pointInside:pointInImageView withEvent:event] && [view isKindOfClass:[UIImageView class]]) {
                //優(yōu)先響應(yīng)imageView的點擊事件
                return view;
            }
        }
        //其次響應(yīng)scrollView
        return self.scrollView;
    }
    return nil;
}

轉(zhuǎn)換坐標系convertPoint沐序、及判斷點在范圍內(nèi) 詳細介紹:http://www.cocoachina.com/ios/20161206/18297.html

以上琉用,希望其他人能少踩坑吧hhh

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市策幼,隨后出現(xiàn)的幾起案子邑时,更是在濱河造成了極大的恐慌,老刑警劉巖特姐,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晶丘,死亡現(xiàn)場離奇詭異,居然都是意外死亡唐含,警方通過查閱死者的電腦和手機浅浮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捷枯,“玉大人滚秩,你說我怎么就攤上這事』蠢Γ” “怎么了郁油?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵本股,是天一觀的道長。 經(jīng)常有香客問我桐腌,道長拄显,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任案站,我火速辦了婚禮躬审,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蟆盐。我一直安慰自己承边,他們只是感情好,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布石挂。 她就那樣靜靜地躺著炒刁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪誊稚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天罗心,我揣著相機與錄音里伯,去河邊找鬼。 笑死渤闷,一個胖子當著我的面吹牛疾瓮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播飒箭,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼狼电,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了弦蹂?” 一聲冷哼從身側(cè)響起肩碟,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凸椿,沒想到半個月后削祈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡脑漫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年髓抑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片优幸。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡吨拍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出网杆,到底是詐尸還是另有隱情羹饰,我是刑警寧澤伊滋,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站严里,受9級特大地震影響新啼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刹碾,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一燥撞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迷帜,春花似錦物舒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至锦针,卻和暖如春荠察,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奈搜。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工悉盆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人馋吗。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓焕盟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宏粤。 傳聞我的和親對象是個殘疾皇子脚翘,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359