我弄了半天终于弄出UIScrollView循环了,分享一下,方法感觉有点不好,要是有大侠有更好的方法指点一下。
创建了一些文件,ScrollView就是要在ScrollViewController循环的View
//_colorArray.count+2是因为需要在前后多加一个View
CGSize newSize = CGSizeMake(MDefaultScrollWidth*(_colorArray.count+2), MDefaultScrollHeigh);
[self.scrollView setContentSize:newSize];
我的实现方法就是在头和尾各多加一个View,头view与实现的最后一个view数据相同,尾view与实现的第一个view的数据相同:
//头View
NSArray* firstNibView = [[NSBundle mainBundle] loadNibNamed:@"ScrollView"owner:self options:nil];
ScrollView* firstView = [firstNibView objectAtIndex:0];
[firstView setFrame:CGRectMake(0, 0, MDefaultScrollWidth, MDefaultScrollHeigh)];
[firstView.backgroundView setBackgroundColor:[_colorArray lastObject]];
[firstView.label setText:[NSString stringWithFormat:@"%d",5]];
[self.scrollView addSubview:firstView];
//尾view
NSArray* lastNibView = [[NSBundle mainBundle] loadNibNamed:@"ScrollView"owner:self options:nil];
ScrollView* lastView = [lastNibView objectAtIndex:0];
[lastView setFrame:CGRectMake(MDefaultScrollWidth*(_colorArray.count+1), 0, MDefaultScrollWidth, MDefaultScrollHeigh)];
[lastView.backgroundView setBackgroundColor:[_colorArray objectAtIndex:0]];
[lastView.label setText:[NSString stringWithFormat:@"%d",0]];
[self.scrollView addSubview:lastView];
在加入中间要实现的View
for (int i=0; i<_colorArray.count; i++) {
NSArray* nibView = [[NSBundle mainBundle] loadNibNamed:@"ScrollView"owner:self options:nil];
ScrollView* scrollView = [nibView objectAtIndex:0];
[scrollView setFrame:CGRectMake(MDefaultScrollWidth*(i+1), 0, MDefaultScrollWidth, MDefaultScrollHeigh)];
NSLog(@"%d",i);
[scrollView.backgroundView setBackgroundColor:[_colorArray objectAtIndex:i]];
[scrollView.label setText:[NSString stringWithFormat:@"%d",i]];
[self.scrollView addSubview:scrollView];
}
第一次显示的时候要将ScrollView把头view移过去
self.scrollView.delegate = self;
//第一次显示移到第二个view
[self.scrollView scrollRectToVisible:CGRectMake(MDefaultScrollWidth, 0, MDefaultScrollWidth, MDefaultScrollHeigh) animated:NO];
最后在
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
加入方法:
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
CGFloat pageWidth = MDefaultScrollWidth;
CGFloat pageHeigth = MDefaultScrollHeigh;
//计算当前view的位置
int currentPage = floor((self.scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1;
NSLog(@"the current page==%d",currentPage);
if (currentPage == 0) {
//当移动到头view的时候,切换到实现的最后一个view
[self.scrollView scrollRectToVisible:CGRectMake(pageWidth*[_colorArray count], 0, pageWidth, pageHeigth) animated:NO];
NSLog(@"the last image");
return;
}else if(currentPage == [_colorArray count]+1){
//当移动到尾view的时候,切换到实现的第一个view
[self.scrollView scrollRectToVisible:CGRectMake(pageWidth, 0, pageWidth, pageHeigth) animated:NO];
NSLog(@"the first image");
return;
}
}
这样就完成循环了,方法不是很好,希望大侠指正!!!
写的不是很好,把源码传上来,也许更能看懂,以后争取多写些文章练练文笔。
分享到:
相关推荐
UIScrollview 循环滚动 手势 NSTimer
UIScrollview循环滚动,开启NSTimer可以自动循环滚动,拖曳时NSTimer停止,拖曳停止时NSTimer开启
uiscrollview循环滚动
iphone uiscrollview 无缝循环滚动
源码IanScrollView,图片轮播UIScrollView无限循环滚动,这是利用UIScrollView实现的图片无限循环滚动效果,在很多应用上都很常见。获取网络图片,图片可以点击,控制是否显示pageControl,控制是否自动滚动,可以...
定时滚动和循环滚动,可点击图片和PageController #import "ASIFormDataRequest.h" #import "GWPublicClass.h" @interface ViewController () @end @implementation ViewController { UIScrollView * ...
资源代码简洁,使用3个UIImageView实现了重用机制,既实现了NSTimer自动展示效果,并且在手动拖动时会停止NSTimer,拖动结束便会恢复, 也实现了UIPageControll 在滑动到页面一半时就能够实时响应。...
少scrollview版的自动轮播图,同时可以手动滑动,左右循环滚动。
UIScrollView 实现自动滚动 循环播放的视图 这个是优化版本的 之前的删除了 其实大家对这种demo并不少见了,但是我还是想自己去动手封装一个可以在任何项目中拿来就可以使用的,自己写的代码要比粘贴复制的代码更有...
主要介绍了iOS UIScrollView滚动视图/无限循环滚动/自动滚动,需要的朋友可以参考下
UIScrollView 无限自动循环 类似商品推荐产品图无限循环,配合UIPageControl使用
用swift中UIScrollView实现的广告循环无缝滚动
见博客http://blog.csdn.net/baidu_nod/article/details/38128973
UIScrollview 图片无缝连续自动滚动 图片每隔2秒自动滚动一次
UIScrollView 实现自动滚动 循环播放的视图 其实大家对这种demo并不少见了,但是我还是想自己去动手封装一个可以在任何项目中拿来就可以使用的,自己写的代码要比粘贴复制的代码更有意义,自己也就理解的更加深刻了...
本Deno用scrollView很简单的实现了图片的无限循环滚动,且支持pageControl.zip