ScrollView知识点

ScrollView知识点(含滚动效果)

1.Scrollview相关知识点

1.Scrollview的初始化及注意事项

    #define kSCREEN_W [UIScreen mainScreen].bounds.size.width
    #define kSCROLL_VIEW_H 200
    #define kIMAGE_NUM self.imageNameArray.count
    //懒加载滚动视图
    - (UIScrollView *)scrollView {
    if (!_scrollView) {
        _scrollView = [[UIScrollView alloc] init];

        _scrollView.frame = CGRectMake(0, 0, kSCREEN_W, kSCROLL_VIEW_H);
        _scrollView.backgroundColor = [UIColor grayColor];
        //让当前控制器成为滚动视图的代理
        _scrollView.delegate = self;
        //设置分页效果
        _scrollView.pagingEnabled = YES;
        //关闭弹簧效果
        _scrollView.bounces = NO;
        //主动设置默认偏移一张图片
        _scrollView.contentOffset = CGPointMake(kSCREEN_W, 0);
    }
    return _scrollView;
    }
注意:一般情况系统会将有个偏移量,关闭方法为且在控制器中实现
self.automaticallyAdjustsScrollViewInsets = NO;
设置偏移量(使用带动画模式的方法)
        //获得当前的偏移量
    CGFloat offset = self.scrollView.contentOffset.x;

    //增加一张图片的宽度后,重新设置偏移量
    CGFloat newOffset = offset + kSCREEN_W;

    //    //设置偏移量
    //    self.scrollView.contentOffset = CGPointMake(newOffset, 0);
    //设置偏移量(使用带动画模式的方法)
    [self.scrollView setContentOffset:CGPointMake(newOffset, 0) animated:YES];
添加完图片后根据图片数量设置滚动范围
    self.scrollView.contentSize = CGSizeMake(kSCREEN_W * kIMAGE_NUM, 0);

2.滚动视图的代理方法

#pragma mark --滚动视图的代理方法
//滚动图片的时候会不断的调用(频率很高,非必要不使用)
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    //获得当前偏移量
    CGFloat currentOffset = scrollView.contentOffset.x;

    //计算当前图片所在的页数
    NSInteger pageNum = currentOffset / kSCREEN_W + 0.5;
    //    NSLog(@"%ld", pageNum);

    self.pageControl.currentPage = pageNum - 1;
    }
//滚动停止的时候会调用
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    //    NSLog(@"%@", NSStringFromSelector(_cmd));

    //    //先获得当前的偏移量
    //    CGFloat currentOffset = scrollView.contentOffset.x;
    //    NSLog(@"%f--%f", currentOffset, kSCREEN_W * (kIMAGE_NUM - 2));
    //
    //    if (currentOffset > kSCREEN_W * (kIMAGE_NUM - 2)) {
    //        [scrollView setContentOffset:CGPointMake(kSCREEN_W, 0) animated:NO];
    //    }
    //
    //    if (currentOffset < kSCREEN_W) {
    //        [scrollView setContentOffset:CGPointMake(kSCREEN_W * (kIMAGE_NUM - 2), 0) animated:NO];
    //    }
    }
//即将开始减速
    - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
    //    NSLog(@"%@", NSStringFromSelector(_cmd));

    //先获得当前的偏移量
        CGFloat currentOffset = scrollView.contentOffset.x;
    //    NSLog(@"%f--%f", currentOffset, kSCREEN_W * (kIMAGE_NUM - 2));
        if (currentOffset > kSCREEN_W * (kIMAGE_NUM - 2)) {
            [scrollView setContentOffset:CGPointMake(kSCREEN_W, 0) animated:NO];
        }
        if (currentOffset < kSCREEN_W) {
            [scrollView setContentOffset:CGPointMake(kSCREEN_W * (kIMAGE_NUM - 2), 0) animated:NO];
        }
    }
//拖动即将开始的时候调用
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    //开始手动拖动图片的时候,停止定时器
        [self stopTimer];
    }
//拖动结束的时候会调用
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView     willDecelerate:(BOOL)decelerate {
    //结束拖动时,重新开启定时器
        [self startTimer];
    }
//自动滚动的时候调用的方法(非人为拖动)
    - (void)scrollViewDidEndScrollingAnimation:(UIScrollView    *)scrollView {
        //    NSLog(@"%@", NSStringFromSelector(_cmd));
    //调用了切换图片代码的代理方法
        //    [self scrollViewDidEndDecelerating:scrollView];
        [self scrollViewWillBeginDecelerating:scrollView];
    }

3.UIPageControl分页控制器

    #pragma mark --懒加载
    //分页控制器
    - (UIPageControl *)pageControl {
        if (!_pageControl) {
            _pageControl = [[UIPageControl alloc] init];
            _pageControl.frame = CGRectMake((self.bounds.size.width -   100) / 2, CGRectGetMaxY(self.scrollView.frame) - 30, 100, 30);

        //        _pageControl.backgroundColor = [UIColor redColor];

        //设置未选中点的颜色
            _pageControl.pageIndicatorTintColor = [UIColor yellowColor];
        //设置选中点的颜色
            _pageControl.currentPageIndicatorTintColor = [UIColor redColor];

        //设置分页器的点个数
            _pageControl.numberOfPages = kIMAGE_NUM - 2;
    }
        return _pageControl;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值