思路:
- 刚开始时,设置UIScrollView的contentSize属性的范围为三个自身的宽度
- 将UIScrollView的contentOffset.x属性设置在中间,
- 定义两个指针a,b,a专门指着当前显示的UIImageView1,b指着另一个UIImageView
- 此时a指着UIImageView1
- 当向右移动时,创建一个新的UIImageView2显示出来,b指着
- 当到顶的时候,交换指针,也就是a指着UIImageView2,b指着UIImageView1,再把UIImageView1和UIImageView2的x值交换,再将UIScrollView的contentSize属性的范围移到中间
- 实现图片循环利用
全部代码
#import "ViewController.h"
@interface ViewController ()<UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollow
@property(nonatomic,strong)UIImageView *load
@property(nonatomic,strong)UIImageView *newimage
@end
@implementation ViewController
- (NSMutableSet *)visibleImageViews{
if (_visibleImageViews == nil) {
_visibleImageViews = [[NSMutableSet alloc]init]
}
return _visibleImageViews
}
- (NSMutableSet *)reusedImageViews{
if (_reusedImageViews == nil) {
_reusedImageViews = [[NSMutableSet alloc]init]
}
return _reusedImageViews
}
- (UIImageView *)load{
if (_load == nil) {
_load = [[UIImageView alloc]init]
}
return _load
}
- (UIImageView *)newimage{
if (_newimage == nil) {
_newimage = [[UIImageView alloc]init]
}
return _newimage
}
- (void)viewDidLoad{
[super viewDidLoad]
self.scrollow.contentSize = CGSizeMake(self.scrollow.frame.size.width * 3, self.scrollow.frame.size.height)
self.scrollow.contentOffset = CGPointMake(self.scrollow.frame.size.width, 0)
[self setImage]
self.scrollow.delegate = self
}
- (void)setImage{
self.load = [[UIImageView alloc]initWithFrame:CGRectMake(self.scrollow.frame.size.width, 0, self.scrollow.frame.size.width, self.scrollow.frame.size.height)]
self.load.image = [UIImage imageNamed:@"img_01"]
[self.scrollow addSubview:self.load]
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
// 向右偏时
if (self.scrollow.contentOffset.x > self.scrollow.frame.size.width && self.scrollow.contentOffset.x < 2 * self.scrollow.frame.size.width) {
self.newimage.image = [UIImage imageNamed:@"img_01"]
self.newimage.frame = CGRectMake(self.scrollow.frame.size.width * 2, 0, self.scrollow.frame.size.width, self.scrollow.frame.size.height)
[self.scrollow addSubview:self.newimage]
}
// 当向(右边/左边)偏移到顶端时调用
if (self.scrollow.contentOffset.x >= self.scrollow.frame.size.width * 2||self.scrollow.contentOffset.x <= 0) {
// 交换指针
UIImageView *ii = self.load
self.load = self.newimage
self.newimage = ii
// 交换位置
CGRect rect1 = self.load.frame
CGRect rect = self.newimage.frame
rect.origin.x = self.load.frame.origin.x
rect1.origin.x = self.newimage.frame.origin.x
self.newimage.frame = rect
self.load.frame = rect1
// 移动scrollow的偏移量
self.scrollow.contentOffset = CGPointMake(self.scrollow.frame.size.width, 0)
}
// 向左偏时
if (self.scrollow.contentOffset.x < self.scrollow.frame.size.width && self.scrollow.contentOffset.x > 0) {
self.newimage.image = [UIImage imageNamed:@"img_01"]
self.newimage.frame = CGRectMake(0, 0, self.scrollow.frame.size.width, self.scrollow.frame.size.height)
[self.scrollow addSubview:self.newimage]
}
}