广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    iOS应用开发中UIScrollView滚动视图的基本用法总结

    2018-04-06 10:40:40 次阅读 稿源:互联网
    广告

    在项目开发时遇到一个问题,我在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");
    }

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告