iOS應(yīng)用開(kāi)發(fā)中UIScrollView滾動(dòng)視圖的基本用法總結(jié)
在項(xiàng)目開(kāi)發(fā)時(shí)遇到一個(gè)問(wèn)題,我在UIViewController上面直接創(chuàng)建了一個(gè)UIScrollerView,把UIScrollerView作為一個(gè)子視圖添加到了UIViewController,
又再UIScrollerView中添加了一個(gè)UISlider的組件,在手勢(shì)滑動(dòng)的過(guò)程中,很難滑動(dòng)到UISlider這個(gè)控件,經(jīng)常是滑動(dòng)的時(shí)候UIScrollerView進(jìn)行了滾動(dòng),
而UISlider這個(gè)控件沒(méi)有滑動(dòng),讓人很抓狂。
上網(wǎng)具體去了解了一下UIScrollerView的詳解,終于徹底明白了問(wèn)題出在哪里
下面引用一下前輩的總結(jié),因?yàn)樽约河X(jué)得沒(méi)有他總結(jié)的詳細(xì)
UIScrollView重載了hitTest方法,當(dāng)手指touch的時(shí)候,UIScrollView會(huì)攔截所有event,然后等待150ms,在這段時(shí)間內(nèi),如果沒(méi)有手指沒(méi)有移動(dòng),當(dāng)時(shí)間結(jié)束時(shí),UIScrollView會(huì)發(fā)送tracking event到子視圖上,并且自身不滑動(dòng)。在時(shí)間結(jié)束前,手指發(fā)生了移動(dòng),那么UIScrollView就會(huì)進(jìn)行滑動(dòng),從而取消發(fā)送tracking。
看來(lái)是UIScrollView的問(wèn)題。直接拖動(dòng)UISlider,此時(shí)touch時(shí)間在150ms以?xún)?nèi),UIScrollView會(huì)認(rèn)為是拖動(dòng)自己,從而攔截了event,導(dǎo)致UISlider接受不到滑動(dòng)的event。但是只要按住UISlider一會(huì)再拖動(dòng),此時(shí)此時(shí)touch時(shí)間超過(guò)150ms,因此滑動(dòng)的event會(huì)發(fā)送到UISlider上。
期間試過(guò)幾種方法,只有一種可行,就是重寫(xiě)UIScrollView的hitTest方法:當(dāng)滑動(dòng)UISlider時(shí),使UIScrollView不可滑動(dòng)。
但是又出現(xiàn)了一個(gè)問(wèn)題,我的UIScrollerView是直接繼承了UIScrollerView,在UIViewController中是無(wú)法重寫(xiě)的UIScrollerView的hitTest方法的,所以需要重新創(chuàng)建一個(gè)view,繼承UIScrollerView,然后再重寫(xiě)上述方法,然后再導(dǎo)入U(xiǎn)IViewController中就可以輕松實(shí)現(xiàn)了。
下面來(lái)看一些UIScrollerView中一些比較常見(jiàn)的用法,說(shuō)明都包含在注釋中了:
- (void)viewDidLoad
{
[super viewDidLoad];
scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
scrollView.backgroundColor = [UIColor redColor];
// 是否支持滑動(dòng)最頂端
// scrollView.scrollsToTop = NO;
scrollView.delegate = self;
// 設(shè)置內(nèi)容大小
scrollView.contentSize = CGSizeMake(320, 460*10);
// 是否反彈
// scrollView.bounces = NO;
// 是否分頁(yè)
// scrollView.pagingEnabled = YES;
// 是否滾動(dòng)
// scrollView.scrollEnabled = NO;
// scrollView.showsHorizontalScrollIndicator = NO;
// 設(shè)置indicator風(fēng)格
// scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
// 設(shè)置內(nèi)容的邊緣和Indicators邊緣
// scrollView.contentInset = UIEdgeInsetsMake(0, 50, 50, 0);
// scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 50, 0, 0);
// 提示用戶(hù),Indicators flash
[scrollView flashScrollIndicators];
// 是否同時(shí)運(yùn)動(dòng),lock
scrollView.directionalLockEnabled = YES;
[self.view addSubview:scrollView];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 200, 320, 40)];
label.backgroundColor = [UIColor yellowColor];
label.text = @"學(xué)習(xí)scrolleview";
[scrollView addSubview:label];
[label release];
}
#pragma mark -
/*
// 返回一個(gè)放大或者縮小的視圖
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
}
// 開(kāi)始放大或者縮小
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:
(UIView *)view
{
}
// 縮放結(jié)束時(shí)
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{
}
// 視圖已經(jīng)放大或縮小
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
NSLog(@"scrollViewDidScrollToTop");
}
*/
// 是否支持滑動(dòng)至頂部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
return YES;
}
// 滑動(dòng)到頂部時(shí)調(diào)用該方法
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
NSLog(@"scrollViewDidScrollToTop");
}
// scrollView 已經(jīng)滑動(dòng)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"scrollViewDidScroll");
}
// scrollView 開(kāi)始拖動(dòng)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
NSLog(@"scrollViewWillBeginDragging");
}
// scrollView 結(jié)束拖動(dòng)
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
NSLog(@"scrollViewDidEndDragging");
}
// scrollView 開(kāi)始減速(以下兩個(gè)方法注意與以上兩個(gè)方法加以區(qū)別)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
NSLog(@"scrollViewWillBeginDecelerating");
}
// scrollview 減速停止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSLog(@"scrollViewDidEndDecelerating");
}
- IOS上iframe的滾動(dòng)條失效的解決辦法
- iOS實(shí)現(xiàn)滾動(dòng)字幕的動(dòng)畫(huà)特效
- IOS中UITableView滾動(dòng)到指定位置
- iOS ScrollView嵌套tableView聯(lián)動(dòng)滾動(dòng)的思路與最佳實(shí)踐
- IOS 的彈性滾動(dòng)解決方案
- iOS使用UICollectionView實(shí)現(xiàn)橫向滾動(dòng)照片效果
- ios之UIScrollerView滾動(dòng)視圖總結(jié)
- iOS Swift UICollectionView橫向分頁(yè)滾動(dòng),cell左右排版問(wèn)題詳解
- 在IOS系統(tǒng)上滾動(dòng)條滾動(dòng)到指定的位置出現(xiàn)空白頁(yè)面的解決方案
- iOS實(shí)現(xiàn)循環(huán)滾動(dòng)公告欄
相關(guān)文章
iOS使用 CABasicAnimation 實(shí)現(xiàn)簡(jiǎn)單的跑馬燈(無(wú)cpu暴漲)
本篇文章主要介紹了iOS使用 CABasicAnimation 實(shí)現(xiàn)簡(jiǎn)單的跑馬燈(無(wú)cpu暴漲),具有一定的參考價(jià)值,有興趣的可以了解一下。2017-01-01
Objective-C 自定義漸變色Slider的實(shí)現(xiàn)方法
系統(tǒng)提供UISlider,但在開(kāi)發(fā)過(guò)程中經(jīng)常需要自定義,本次需求內(nèi)容是實(shí)現(xiàn)一個(gè)擁有漸變色的滑動(dòng)條,且漸變色隨著手指touch的位置不同改變區(qū)域,這篇文章主要介紹了Objective-C 自定義漸變色Slider,需要的朋友可以參考下2024-07-07
iOS Tabbar中間添加凸起可旋轉(zhuǎn)按鈕功能
最近的項(xiàng)目中有需求在tabbar中間添加凸起按鈕,并且點(diǎn)擊時(shí)按鈕要旋轉(zhuǎn),看了仿斗魚(yú)的凸起,點(diǎn)擊后是present出來(lái)View,這篇文章主要介紹了iOS Tabbar中間添加凸起可旋轉(zhuǎn)按鈕,需要的朋友可以參考下2017-12-12
iOS使用UICountingLabel實(shí)現(xiàn)數(shù)字變化的動(dòng)畫(huà)效果
本文主要介紹了iOS使用UICountingLabel實(shí)現(xiàn)數(shù)字變化動(dòng)畫(huà)效果的方法,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2016-12-12
使用SDLocalize實(shí)現(xiàn)高效完成iOS多語(yǔ)言工作
這篇文章主要介紹了使用SDLocalize實(shí)現(xiàn)高效完成iOS多語(yǔ)言工作的相關(guān)資料,需要的朋友可以參考下2022-10-10
IOS 開(kāi)發(fā)之網(wǎng)絡(luò)圖片輪播圖的實(shí)現(xiàn)
這篇文章主要介紹了IOS 開(kāi)發(fā)之網(wǎng)絡(luò)圖片輪播圖的實(shí)現(xiàn)的相關(guān)資料,希望通過(guò)此文大家能夠掌握輪播圖的實(shí)現(xiàn),需要的朋友可以參考下2017-09-09

