我弄了半天终于弄出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循环滚动"这个知识点涉及到如何让UIScrollView的内容无限滚动,就像一个轮播图一样。在这个过程中,通常会结合使用NSTimer来实现自动滚动效果,并且在用户进行手动拖动时暂停滚动,用户停止操作后恢复...
本教程将详细讲解如何实现`UIScrollView`的循环滚动功能,并结合手势识别和自动滚动,以提升用户体验。我们将通过分析提供的压缩包文件中的`UIScrollViewLoop-1`、`UIScrollViewLoop-2`和`UIScrollViewLoop`来探索这...
当我们需要实现如轮播图、无限滚动列表等效果时,`UIScrollView` 的循环滚动特性就显得尤为关键。这个特性使得内容可以在到达终点后重新开始,给人一种连续无尽的感觉。 实现 `UIScrollView` 循环滚动的关键在于...
这个示例代码展示了如何实现一个带有定时滚动和循环滚动功能的`UIScrollView`,同时结合了`UIPageControl`来指示当前显示的页面,并允许用户点击图片。 首先,我们看到`ViewController`继承自`UIViewController`并...
源码IanScrollView,图片轮播UIScrollView无限循环滚动,这是利用UIScrollView实现的图片无限循环滚动效果,在很多应用上都很常见。获取网络图片,图片可以点击,控制是否显示pageControl,控制是否自动滚动,可以...
本文将详细探讨如何在iOS中创建一个循环滚动的`UIScrollView`。 首先,我们需要理解`UIScrollView`的基本工作原理。`UIScrollView`有一个contentSize属性,它定义了可滚动区域的大小。当contentSize大于实际视图的...
- 如果希望实现循环滚动,可以在滚动到边缘时,根据方向将`contentOffset`重置到另一端。 2. **手动滚动的实现**: - 用户可以通过手势(如PanGestureRecognizer)直接操作UIScrollView进行手动滚动。 - 默认...
然而,标准的`UIScrollView`并不支持自动无缝循环滚动,即当用户滑动到底部或顶部时,内容不能立即从开头或结尾重新出现。为了实现这种效果,开发者通常需要自定义`UIScrollView`的行为,这涉及到对`...
4. 自动滚动:实现广告的自动循环滚动,我们可以使用NSTimer配合scrollRectToVisible方法。首先,创建一个定时器,每隔一定时间滚动到下一个广告位置。 ```swift let timer = Timer.scheduledTimer(timeInterval: ...
在iOS开发中,`UIScrollView` 是一个非常重要的控件,它允许用户在内容超过视图范围时进行滚动查看。在本教程中,我们将探讨如何实现一个`UIScrollView` 的左右循环滑动功能,同时具备自动轮播的效果。这个功能通常...
资源代码简洁,使用3个UIImageView实现了重用机制,既实现了NSTimer自动展示效果,并且在手动拖动时会停止NSTimer,拖动结束便会恢复, 也实现了UIPageControll 在滑动到页面一半时就能够实时响应。...
在本示例项目“UIScrollView实现图片无限滚动Demo”中,开发者利用`UIScrollView` 和其相关特性,创建了一个可以无限循环滚动图片的界面,同时集成了`UIPageControl` 用于指示当前显示的图片位置。这个功能常用于...
UIScrollView 实现自动滚动 循环播放的视图 这个是优化版本的 之前的删除了 其实大家对这种demo并不少见了,但是我还是想自己去动手封装一个可以在任何项目中拿来就可以使用的,自己写的代码要比粘贴复制的代码更有...
在iOS开发中,`UIScrollView`是一个非常重要的控件,它允许用户在内容超过视图边界时滚动查看。在电商应用中,我们经常看到一种效果,那就是商品推荐或广告轮播图能够实现无限自动循环,这正是`UIScrollView`结合`...
在这个实例中,我们将关注如何使用UIScrollView来实现无限循环滚动和自动滚动的功能,这在展示产品、图片轮播或创建滑动导航时非常有用。 首先,我们需要理解UIScrollView的基本属性和方法。`contentSize`定义了...
总之,实现iOS中的UIScrollView循环滑动涉及到对UIScrollView的工作机制的理解,以及对滚动事件的精确控制。通过复制并重新排列内容视图中的元素,我们可以创造出视觉上的无限循环效果,让用户体验到流畅的滑动浏览...