iOS中 scrollView版轮播器(优化版)

该博客详细介绍了如何在iOS中利用scrollView实现一个优化版的轮播器。通过设置内容尺寸、隐藏滚动条、开启分页以及添加定时器,实现每隔2秒自动切换图片的效果。同时,通过代理方法监听scrollView的滚动状态,确保用户手动滑动时定时器暂停,滑动结束再重新启动定时器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scrollView版轮播器(优化版)


- (void)viewDidLoad

{

    [superviewDidLoad];

    

    // 0.一些固定的尺寸参数

    CGFloat imageW =self.scrollView.frame.size.width;

    CGFloat imageH =self.scrollView.frame.size.height;

    CGFloat imageY =0;

    

    // 1.添加5张图片到scrollView

    for (int i =0; i<MJImageCount; i++) {

        UIImageView *imageView = [[UIImageViewalloc]init];

        

        // 设置frame

        CGFloat imageX = i * imageW;

        imageView.frame =CGRectMake(imageX, imageY, imageW, imageH);

        

        // 设置图片

        NSString *name = [NSStringstringWithFormat:@"img_0%d", i +1];

        imageView.image = [UIImageimageNamed:name];

        

        [self.scrollViewaddSubview:imageView];

    }

    

    // 2.设置内容尺寸

    CGFloat contentW =MJImageCount * imageW;

    self.scrollView.contentSize =CGSizeMake(contentW,0);

    

    // 3.隐藏水平滚动条

    self.scrollView.showsHorizontalScrollIndicator = NO;

    

    // 4.分页

    self.scrollView.pagingEnabled = YES;

    self.scrollView.delegate =self;

    

    // 5.设置pageControl的总页数

    self.pageControl.numberOfPages = 5;

    

    // 6.添加定时器(每隔2秒调用一次selfnextImage方法)


   // [self addTimer];

}


/**

 *  添加定时器

 */

- (void)addTimer

{

 // self.timer = [NSTimerscheduledTimerWithTimeInterval:2.0target:selfselector:@selector(nextImage)userInfo:nilrepeats:YES];

   

   self.timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];

   [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

}




- (void)nextImage

{

    // 1.增加pageControl的页码

    int page =0;

    if (self.pageControl.currentPage == 4) {

        page = 0;

        

        self.pageControl.currentPage =  page;

        

        // 2.计算scrollView滚动的位置

        CGFloat offsetX = page *self.scrollView.frame.size.width;

        CGPoint offset =CGPointMake(offsetX,0);

        

        //改变当前的现实页数通过改变偏移量来实现换页

        [self.scrollViewsetContentOffset:offsetanimated:YES];

        

    } else {

        page = self.pageControl.currentPage +1;

   

    

    self.pageControl.currentPage =  page;

    

    // 2.计算scrollView滚动的位置

    CGFloat offsetX = page *self.scrollView.frame.size.width;

    CGPoint offset =CGPointMake(offsetX,0);

    

    //改变当前的现实页数通过改变偏移量来实现换页

    [self.scrollViewsetContentOffset:offsetanimated:YES];

        

    }

}



#pragma mark - 代理方法

/**

 *  scrollView正在滚动就会调用

 */

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    // 根据scrollView的滚动位置决定pageControl显示第几页

    CGFloat scrollW = scrollView.frame.size.width;

 //加一半这样用户体验会更好 拖拽过一半才会换页

//    这样的方法适合写在viewdidcsroll里面

    int page = (scrollView.contentOffset.x + scrollW *0.5) / scrollW;

    self.pageControl.currentPage = page;

}


/**

 *  开始拖拽的时候调用

 */

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

    // 停止定时器(一旦定时器停止了,就不能再使用)

    [selfremoveTimer];

}


/**

 *  停止拖拽的时候调用

 */

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

{

    // 开启定时器

    [selfaddTimer];

}


/**

 *  移除定时器

 */

- (void)removeTimer

{

    [self.timerinvalidate];

    self.timer =nil;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值