#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 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;
self.pageControl.currentPage = pageNum - 1;
}
//滚动停止的时候会调用
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
}
//即将开始减速
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
CGFloat currentOffset = scrollView.contentOffset.x;
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 {
[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.pageIndicatorTintColor = [UIColor yellowColor];
_pageControl.currentPageIndicatorTintColor = [UIColor redColor];
_pageControl.numberOfPages = kIMAGE_NUM - 2;
}
return _pageControl;
}