UIScrollView用的最多的就是轮播图和相册了,轮播图比较简单,一个定时器一个UIScrollView一个UIPageControl即可搞定,相册由于图片数量不确定则考虑到效率问题,过多的话就不能直接设置UIScrollView的contentSize为图片张数*屏幕宽度了,而是类似于轮播图的无限轮播的思路,用两个或者三个屏幕宽度的contentSize来实现图片的浏览。这时图片的浏览还需考虑到最后一张的情形,目前网上大多数demo全都是到最后一张之后继续浏览,然后到第一张,其实这反而是比较简单的处理,照搬无限轮播的思路就可以了;到最后一张继续浏览没有图片反而比较复杂,比如IM程序中的聊天图片的查看就十分满足这种需求。这里先详细地介绍一下UIScrollView的使用以及轮播图的实现。后面高级的使用方法会在下一篇博客中叙述。
使用UIScrollView需要遵循UIScrollViewDelegate代理;
- (void)viewDidLoad {
[super viewDidLoad];
//创建scrollView
UIScrollView *scrollView = [[[UIScrollView alloc]initWithFrame:CGRectMake(10, 200, self.view.frame.size.width - 20, 200)]autorelease];
//背景色
scrollView.backgroundColor = [UIColor greenColor];
//设置contentSize
scrollView.contentSize = CGSizeMake(355 * 4, 200);
//是否反弹
scrollView.bounces = YES;
//点击状态栏回到顶部(默认打开)
scrollView.scrollsToTop = YES;
//是否整页滑动
scrollView.pagingEnabled = YES;
//控制滚动条是否显示
//竖直
scrollView.showsVerticalScrollIndicator = NO;
//水平
scrollView.showsHorizontalScrollIndicator = NO;
//控制是否能够滚动
scrollView.scrollEnabled = YES;
//控制边界是否反弹
scrollView.alwaysBounceVertical = YES;
scrollView.alwaysBounceHorizontal = YES;
scrollView.tag = 111;
//原点距离左上角的偏移量
//scrollView.contentOffset = CGPointMake(100, 100);
for (int i = 1; i <= 4; i++) {
UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png", i]];
UIImageView *imgView = [[[UIImageView alloc]initWithFrame:CGRectMake(355 * (i - 1), 0, 355, 200)]autorelease];
imgView.image = img;
[scrollView addSubview:imgView];
}
//设置代理
scrollView.delegate = self;
[self.view addSubview:scrollView];
UIPageControl *pageControl = [[[UIPageControl alloc]initWithFrame:CGRectMake(10, 410, 355, 20)]autorelease];
pageControl.backgroundColor = [UIColor magentaColor];
//设置个数
pageControl.numberOfPages = 4;
//设置圆点颜色
pageControl.pageIndicatorTintColor = [UIColor greenColor];
//设置当前圆点颜色
pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
//当前页
//pageControl.currentPage = 2;
//添加事件
[pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged];
pageControl.tag = 222;
//实现轮播
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(test) userInfo:nil repeats:YES];
[self.view addSubview:pageControl];
}
//轮播
- (void)test{
UIScrollView *scrollView = (UIScrollView *)[self.view viewWithTag:111];
UIPageControl *pageControl = (UIPageControl *)[self.view viewWithTag:222];
NSUInteger page = scrollView.contentOffset.x / 355;
scrollView.contentOffset = CGPointMake(355 * page, 0);
if (page < 3) {
page = page + 1;
scrollView.contentOffset = CGPointMake(355 * page, 0);
pageControl.currentPage = page;
}else{
page = 0;
scrollView.contentOffset = CGPointMake(355 * page, 0);
pageControl.currentPage = page;
}
}
#pragma mark --pageControl的方法--
- (void)changePage:(UIPageControl *)pageControl{
//NSLog(@"%lu", pageControl.currentPage);
//获取scorllView
UIScrollView *scorllView = (UIScrollView *)[self.view viewWithTag:111];
//根据currentPage来改变偏移量
scorllView.contentOffset = CGPointMake(355 * pageControl.currentPage, 0);
}
#pragma mark --scrollView的代理方法--
//滚动过程中执行的方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
// NSLog(@"滚动过程中执行此方法");
float red = arc4random() % 256 / 255.0;
float green = arc4random() % 256 / 255.0;
float blue = arc4random() % 256 / 255.0;
self.view.backgroundColor = [UIColor colorWithRed:red green:green blue:blue alpha:1];
}
//开始拖拽
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
//NSLog(@"开始拖拽执行次方法");
}
//将要结束拖拽时
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
//NSLog(@"将要结束拖拽时执行此方法");
}
//结束拖拽
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
//NSLog(@"结束拖拽时执行此方法");
}
//将要开始减速时
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
//NSLog(@"将要开始减速时执行次方法");
}
//减速结束
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
//NSLog(@"减速结束时执行此方法");
//获取pageControl
UIPageControl *pageControl = (UIPageControl *)[self.view viewWithTag:222];
//根据偏移量来控制currentPage
pageControl.currentPage = scrollView.contentOffset.x / 355;
}
效果:拖动时随机改变颜色,就是这么炫酷并不是bug。。。