UIScrollView实现图片轮播器的无限滚动 UIScrollView是iOS开发中常用的控件之一,它可以实现滚动的功能,但是iOS中并没有现成的控件直接实现图片轮播器的功能,但是通过UIScrollView的分页设置,可以实现滚动轮播的功能。 一、UIScrollView的分页设置 UIScrollView对象有一个pagingEnabled成员,如果设置为YES,那么每一个scrollView尺寸这么大的区域就会被当作一页,在滚动时会根据滚动的比例自动计算应该切换到哪一页。 二、无限滚动原理 要实现无限滚动,需要额外的两张图片,假设我们的图片有五张,存在images数组中,那么我们在将图片插入到scrollView中时,在第一张图片前面插入一个最后一张图片作为辅助图片,在最后一张后面插入一个第一张图片作为辅助图片。这样,当滚动到第一张前面一张时,在页面切换结束后无动画的切换scrollView的偏移量为最后一张图片(不包含最后一张后面的第一张那个辅助图片),这样就实现了由辅助图片到真实图片的过渡,之所以设置辅助图片是为了在滚动中看到那个真实图片。同理,当滚动到最后一张的后面一张时,我们吧scrollView的偏移量设置为第一张图片即可。 三、代码实现 这个代码是在开发一个项目中所写的,已经封装称一个View,只需要调用initWithFrame指定轮播器尺寸,然后通过设置images成员的值即可实现无限滚动的轮播。 ``` // .h #import <UIKit/UIKit.h> @interface ESPicPageView : UIView @property (nonatomic, strong) NSArray *images; @end // -------------------------------------------- // .m #import "ESPicPageView.h" #import "UIImageView+WebCache.h" @interface ESPicPageView () <UIScrollViewDelegate> @property (nonatomic, weak) UIScrollView *scrollView; @property (nonatomic, weak) UIPageControl *pageControl; @property (nonatomic, assign) CGFloat imgW; @property (nonatomic, assign) CGFloat imgH; @property (nonatomic, strong) NSTimer *timer; @property (nonatomic, strong) NSArray *imageViews; @property (nonatomic, assign) NSInteger imageCount; @end @implementation ESPicPageView - (instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.backgroundColor = [UIColor blueColor]; UIScrollView *scrollView = [[UIScrollView alloc] init]; self.scrollView = scrollView; self.scrollView.delegate = self; self.scrollView.pagingEnabled = YES; self.scrollView.showsHorizontalScrollIndicator = NO; self.scrollView.backgroundColor = [UIColor whiteColor]; // ... } return self; } ``` 四、结论 通过上面的代码和解释,我们可以实现UIScrollView的无限滚动图片轮播器,通过UIScrollView的分页设置和辅助图片的使用,可以实现无限滚动的功能。同时,我们也可以通过自定义View来封装这个功能,使得代码更加简洁和易于使用。
- 粉丝: 3
- 资源: 951
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助