滾動視圖也是很常見的,這里武林技術頻道小編帶大家來學習所有的基本用法、屬性設置和委托,討論滾動視圖也很簡單,下面就讓武林技術頻道小編和大家分享iOS應用開發之UIScrollView滾動視圖的基本用法,一起來學習一下吧!
在項目開發時遇到一個問題,我在UIViewController上面直接創建了一個UIScrollerView,把UIScrollerView作為一個子視圖添加到了UIViewController,
又再UIScrollerView中添加了一個UISlider的組件,在手勢滑動的過程中,很難滑動到UISlider這個控件,經常是滑動的時候UIScrollerView進行了滾動,
而UISlider這個控件沒有滑動,讓人很抓狂。
上網具體去了解了一下UIScrollerView的詳解,終于徹底明白了問題出在哪里
下面引用一下前輩的總結,因為自己覺得沒有他總結的詳細
UIScrollView重載了hitTest方法,當手指touch的時候,UIScrollView會攔截所有event,然后等待150ms,在這段時間內,如果沒有手指沒有移動,當時間結束時,UIScrollView會發送tracking event到子視圖上,并且自身不滑動。在時間結束前,手指發生了移動,那么UIScrollView就會進行滑動,從而取消發送tracking。
看來是UIScrollView的問題。直接拖動UISlider,此時touch時間在150ms以內,UIScrollView會認為是拖動自己,從而攔截了event,導致UISlider接受不到滑動的event。但是只要按住UISlider一會再拖動,此時此時touch時間超過150ms,因此滑動的event會發送到UISlider上。
期間試過幾種方法,只有一種可行,就是重寫UIScrollView的hitTest方法:當滑動UISlider時,使UIScrollView不可滑動。
但是又出現了一個問題,我的UIScrollerView是直接繼承了UIScrollerView,在UIViewController中是無法重寫的UIScrollerView的hitTest方法的,所以需要重新創建一個view,繼承UIScrollerView,然后再重寫上述方法,然后再導入UIViewController中就可以輕松實現了。
下面來看一些UIScrollerView中一些比較常見的用法,說明都包含在注釋中了:
?
- (void)viewDidLoad
{
??? [super viewDidLoad];
????
??? scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
??? scrollView.backgroundColor = [UIColor redColor];
??? // 是否支持滑動最頂端
//??? scrollView.scrollsToTop = NO;
??? scrollView.delegate = self;
??? // 設置內容大小
??? scrollView.contentSize = CGSizeMake(320, 460*10);
??? // 是否反彈
//??? scrollView.bounces = NO;
??? // 是否分頁
//??? scrollView.pagingEnabled = YES;
??? // 是否滾動
//??? scrollView.scrollEnabled = NO;
//??? scrollView.showsHorizontalScrollIndicator = NO;
??? // 設置indicator風格
//??? scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
??? // 設置內容的邊緣和Indicators邊緣
//??? scrollView.contentInset = UIEdgeInsetsMake(0, 50, 50, 0);
//??? scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 50, 0, 0);
??? // 提示用戶,Indicators flash
??? [scrollView flashScrollIndicators];
??? // 是否同時運動,lock
??? scrollView.directionalLockEnabled = YES;
??? [self.view addSubview:scrollView];
????
??? UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 200, 320, 40)];
??? label.backgroundColor = [UIColor yellowColor];
??? label.text = @"學習scrolleview";
??? [scrollView addSubview:label];
??? [label release];
}
?
#pragma mark -
/*
// 返回一個放大或者縮小的視圖
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
????
}
// 開始放大或者縮小
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:
(UIView *)view
{
????
}
?
// 縮放結束時
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{
????
}
?
// 視圖已經放大或縮小
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
NSLog(@"scrollViewDidScrollToTop");
}
?*/
?
// 是否支持滑動至頂部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
??? return YES;
}
?
// 滑動到頂部時調用該方法
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
{
??? NSLog(@"scrollViewDidScrollToTop");
}
?
// scrollView 已經滑動
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
??? NSLog(@"scrollViewDidScroll");
}
?
// scrollView 開始拖動
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
??? NSLog(@"scrollViewWillBeginDragging");
}
?
// scrollView 結束拖動
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
??? NSLog(@"scrollViewDidEndDragging");
}
?
// scrollView 開始減速(以下兩個方法注意與以上兩個方法加以區別)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
??? NSLog(@"scrollViewWillBeginDecelerating");
}
?
// scrollview 減速停止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
?? NSLog(@"scrollViewDidEndDecelerating");
}
以上就是分享iOS應用開發之UIScrollView滾動視圖的基本用法,更多內容盡在武林技術頻道,有任何問題可以留言給小編哦!