您的位置:首页 > 产品设计 > UI/UE

IOS 利用UIScrollView实现无限轮播图

2016-09-26 15:19 204 查看
需要用到的控件 :

UIScrollView :用来显示滚动图片

UIPageControl:显示滚动的当前页

实现的代理

UIScrollViewDelegate

实现的代理方法

1、- (void)scrollViewDidScroll:(UIScrollView *)scrollView

      2、- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

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

实现思路及部分代码:

     思路:利用scrollView的属性contentOffset.x(偏移量)判断当前视图是向左移动还是向右移动

重点在于当视图滚动到最后一张的时候怎么才能让它继续向后滚动,而不是向前移动到第

一个而后继续滚动。既然它滚动到最后一张还要往后滚动,那么我们可以将视图集合中的

最后元素的接下来的元素设置为原来集合中的第一个元素。这就需要视图每滚动一次就得

做一次元素的移动。

部分代码:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{
if (scrollView.contentOffset.x >= 2 * CGRectGetWidth(self.bounds)) {

id firstsObject = [_imagesArray.firstObject mutableCopy];

[_imagesArray removeObjectAtIndex:0];

[_imagesArray addObject:firstsObject];

self.pageControl.currentPage = self.pageControl.currentPage == self.imagesArray.count - 1?0 : 

++self.pageControl.currentPage;

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

id lastObject = [_imagesArray.lastObject mutableCopy];

[_imagesArray removeLastObject];

[_imagesArray insertObject:lastObject atIndex:0];

self.pageControl.currentPage = self.pageControl.currentPage == 0 ? _imagesArray.count - 1 : 

--self.pageControl.currentPage;

} else {

return;

}

[self reloadImage];

scrollView.contentOffset = CGPointMake(CGRectGetWidth(self.bounds), 0);

} - (void)reloadImage

{

int index = 0;

for (UIImageView *imageView in self.imageViewArray) {

UIImage *image = [UIImage imageNamed:self.imagesArray[index]];

imageView.image = image;

index ++;

}
}

- (void)addTimer

{

// 启动定时器

_timer.fireDate = [NSDate dateWithTimeIntervalSinceNow:3];

self.timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(respondsToTimer) use rInfo:nil repeats:YES];

}

- (void)respondsToTimer {

// 将滚动视图的偏移量显示在右边视图上计时器开始就让视图向右滚动

[_scrollView setContentOffset:CGPointMake(2 * CGRectGetWidth(self.bounds), 0) animated:YES];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: