国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS應用開發中UIScrollView滾動視圖的基本用法總結

2019-10-21 18:55:56
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了iOS應用開發中UIScrollView滾動視圖的基本用法總結,作者還介紹了重寫UIScrollView中的hitTest方法來解決長按的事件問題,需要的朋友可以參考下
 

在項目開發時遇到一個問題,我在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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 运城市| 南靖县| 宁陕县| 湾仔区| 亳州市| 稻城县| 遂昌县| 平安县| 禄劝| 平定县| 嘉峪关市| 横山县| 敦煌市| 六盘水市| 新竹县| 集贤县| 濮阳市| 施甸县| 类乌齐县| 鹤壁市| 安义县| 武穴市| 尉犁县| 临夏县| 荆门市| 铜山县| 海淀区| 焦作市| 长宁县| 乐平市| 昌图县| 西盟| 乌审旗| 富民县| 孝昌县| 宝清县| 都匀市| 西华县| 沁源县| 安龙县| 阜宁县|