原理
这里无限轮播是支持展示不同样式的view的,所以有了重阳池,就是说当前的view和下一个view是有可能不是同一个类型的view,所以刷新某个视图的时候,不能保证刷新前和刷新后需要展示的是同一种类型的view,这时候就需要将刷新前的view放到重用池中,然后通过数据获取将要展示的视图类型
代码
- (void)reloadLeftCell
{
NSInteger count = self.numberOfLoopView;
NSInteger leftIndex = self.currentIndex - 1;
if (leftIndex < 0) {
///如果是负数,说明当前中间的cell是第一个,则左边的应给是最后一个(为了达到无限轮播的效果)
leftIndex = count - 1;
}
if (self.leftView) {
///移除原来的视图,并添加到重用池
[self.leftView removeFromSuperview];
[self.reuseViews addObject:self.leftView];
}
LBHorizontalLoopViewCell *leftCell = [self.dataSource cellForIndex:leftIndex inLoopView:self];
leftCell.frame = CGRectMake(0, 0, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds));
self.leftView = leftCell;
[self.contentScrollView addSubview:self.leftView];
///将当前使用的视图移除重用池
[self.reuseViews removeObject:self.leftView];
}
demo
