iOS 用UIScrollView,UIPageControl制作轮播图

本文详细介绍了如何在视图加载完毕后进行布局优化,包括滚动视图、图片展示和分页控件的实现,同时引入定时器调整滚动位置,确保用户在浏览过程中获得流畅的体验。

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

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    [self layoutScrollView];

    [self layoutImageView];

    [self layoutPageControl];


    [self addTimer1];

}


#pragma mark - 布局scrollView

- (void)layoutScrollView{

    self.scrollView = [[UIScrollView alloc] initWithFrame:[UIScreen mainScreen].bounds];

    self.scrollView.contentSize = CGSizeMake(kScreenWidth * 7, kScreenHeight);

    self.scrollView.pagingEnabled = YES;

    self.scrollView.showsHorizontalScrollIndicator = NO;

    self.scrollView.showsVerticalScrollIndicator = NO;

    self.scrollView.delegate = self;

    [self.view addSubview:self.scrollView];

    [self.scrollView release];

    

}

#pragma mark - 布局图片

- (void)layoutImageView{

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

        UIImageView *imageV = [[UIImageView alloc] initWithFrame:CGRectMake(kScreenWidth * (i + 1), 20, kScreenWidth, kScreenHeight / 3)];

        NSString *imageName = [NSString stringWithFormat:@"p%d", i + 1];

        NSString *filePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@"jpg"];

        imageV.image = [UIImage imageWithContentsOfFile:filePath];

        [self.scrollView addSubview:imageV];

        [imageV release];

    }

    UIImageView *imageView1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 20, kScreenWidth, kScreenHeight / 3)];

    NSString *filePath1 = [[NSBundle mainBundle] pathForResource:@"p6" ofType:@"jpg"];

    imageView1.image = [UIImage imageWithContentsOfFile:filePath1];

    [self.scrollView addSubview:imageView1];

    

    UIImageView *imageView2 = [[UIImageView alloc] initWithFrame:CGRectMake(kScreenWidth * 7, 20, kScreenWidth, kScreenHeight / 3)];

    NSString *filePath2 = [[NSBundle mainBundle] pathForResource:@"p1" ofType:@"jpg"];

    imageView2.image = [UIImage imageWithContentsOfFile:filePath2];

    [self.scrollView addSubview:imageView2];

}



#pragma mark - 布局pageControl

- (void)layoutPageControl{

    self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake((kScreenWidth - 120) / 2, 580, 120, 20)];

    self.pageControl.pageIndicatorTintColor = [UIColor cyanColor];

    self.pageControl.currentPageIndicatorTintColor = [UIColor redColor];

    self.pageControl.numberOfPages = 6;

    self.pageControl.currentPage = 0;

    [self.pageControl addTarget:self action:@selector(handlePageControl:) forControlEvents:UIControlEventValueChanged];

    [self.view addSubview:self.pageControl];

    [self.pageControl release];

    

    

}



- (void)addTimer1{

    self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(handleTime) userInfo:nil repeats:YES];

}


- (void)handleTime{


      [self.scrollView setContentOffset:CGPointMake(self.scrollView.contentOffset.x + 375, 0) animated:YES];

    if (self.scrollView.contentOffset.x == kScreenWidth * 6) {

        self.scrollView.contentOffset = CGPointZero;

        self.pageControl.currentPage = 0;

    }else if (self.scrollView.contentOffset.x == 0){

        self.pageControl.currentPage = 6;

    }else{

        self.pageControl.currentPage = self.scrollView.contentOffset.x / kScreenWidth;

    }

    

}

#pragma mark - UIScrollViewDelegate

//第一张图片向左拖拽会显示最后一张,最后一张向右拖拽会到第一张

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

    if (self.scrollView.contentOffset.x == kScreenWidth * 7) {

        self.pageControl.currentPage = 0;

        self.scrollView.contentOffset = CGPointMake(kScreenWidth, 0);

    }else if (self.scrollView.contentOffset.x == 0){

        self.pageControl.currentPage = 6;

        self.scrollView.contentOffset = CGPointMake(kScreenWidth * 6, 0);

    }else{

        self.pageControl.currentPage = scrollView.contentOffset.x / kScreenWidth - 1;

    }

}





- (void)handlePageControl:(UIPageControl *)pageControl{

    [self.scrollView setContentOffset:CGPointMake(pageControl.currentPage * kScreenWidth, 0) animated:YES];

}



本Demo使用UICollectionView实现自动无限轮播功能。 主要功能: 1.实现自动轮播,可修改轮播的时间 2.轮播图片可以来自本地,也可来自网络,通过单独的方法进行设置即可。对于加载网络图片时,Demo中使用了YYWebImage,也可自行替换成SDWebImage。 3.重写了和系统UIPageControl一样的功能,可用图片代替PageControl上的点点,也可自定义其颜色以及切换动画。 使用方法:使用方法比较简单。 /** * 加载本地图片Banner */ - (void)setupLocalBannerImageView { NSArray *array = @[@"1.png", @"2.png", @"3.png", @"4.png", @"5.png"]; FFBannerView *bannerVew = [FFBannerView bannerViewWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 200) locationImageArray:array]; bannerVew.timeInterval = 2.0; [self.view addSubview:bannerVew]; } /** * 加载网络图片Banner */ - (void)setupNetWorkBannerImageView { NSArray *array = @[@"http://i3.download.fd.pchome.net/t_960x600/g1/M00/07/09/oYYBAFMv8q2IQHunACi90oB0OHIAABbUQAAXO4AKL3q706.jpg", @"http://images.weiphone.net/attachments/photo/Day_120308/118871_91f6133116504086ed1b82e0eb951.jpg", @"http://benyouhuifile.it168.com/forum/macos/attachments/month_1104/110425215921926a173e0f728e.jpg", @"http://benyouhuifile.it168.com/forum/macos/attachments/month_1104/1104241737046031b3a754f783.jpg"]; FFBannerView *bannerVew = [FFBannerView bannerViewWithFrame:CGRectMake(0, 250, [UIScreen mainScreen].bounds.size.width, 200) netWorkImageArray:array placeHolderImage:nil]; bannerVew.timeInterval = 2.0; bannerVew.pageControlStyle = FFPageControlStyleMiddle; bannerVew.delegate = self; [self.view addSubview:bannerVew]; } 以上方式即可简单使用,如需自定义PageControl也可继承FFAbstractDotView,做些基本的设置即可。 gitHub下载地址:喜欢的朋友请给个星呗! 欢迎各位一起来讨论,有问题请发邮箱270452746@qq.com或者直接加我QQ:270452746进行讨论。谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值