iOS中无限循环滚动简单处理实现
iOS中无限循环滚动简单处理实现
说下原理:
1./*初始化/
+ (instancetype)loopScrollViewWithFrame:(CGRect)frame;
将背景collectinview视图初始化设置 代理和数据源 、 布局
2.在激活initwithFrame后触发 layoutSubviews
//默认滚动到要显示的第一张图片
if
(self.imageCollectionView.contentOffset.x ==
0
) {
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:
1
inSection:
0
];
[self scrollToIndexPath:indexPath animated:NO];
self.currentIndex =
1
;
}
界面展示出来的时候默认 显示 真实下标也就是从1开始
设置真实数据源 imageList ,然后展示 的 数据源是loopImageList 这里 呢 多出2个对象,0和末尾,设置时 最后 和 起始,setImageList如下
- (
void
)setImageList:(NSMutableArray *)imageList {
_imageList = imageList;
self.loopImageList = [NSMutableArray arrayWithArray:imageList];
if
(imageList.count>
0
) {
[self.loopImageList insertObject:[imageList lastObject] atIndex:
0
];
[self.loopImageList addObject:[imageList objectAtIndex:
0
]];
}
}
核心代码和思路
- (
void
)scrollViewDidScroll:(UIScrollView *)scrollView {
CGFloat width = self.bounds.size.width;
//在loopImageList中,有n+2个对象,因此index取offset.x/width后的整数
NSInteger index = scrollView.contentOffset.x/width;
//这个比值很重要
CGFloat ratio = scrollView.contentOffset.x/width;
//从显示的最后一张往后滚,自动跳转到显示的第一张
if
(index == self.loopImageList.count-
1
) {
self.currentIndex =
1
;
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:self.currentIndex inSection:
0
];
[self scrollToIndexPath:indexPath animated:NO];
return
;
}
//从显示的第一张往前滚,自动跳转到显示的最后一张
//这里判断条件为contentOffset.x和宽的比值,在往前滚快要结束的时候,能达到无缝切换到显示的最后一张的效果
if
(ratio <=
0.01
) {
self.currentIndex = self.imageList.count;
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:self.currentIndex inSection:
0
];
[self scrollToIndexPath:indexPath animated:NO];
return
;
}
if
(self.currentIndex != index) {
self.currentIndex = index;
}
NSLog(@
"currentIndex = %ld"
,self.currentIndex);
}
这里的原因是为什么呢?
这时候在图滚动 执行代理 监听的时候 ,我们的collectionview有设置 pageEnable 分页属性很关键有分页动画。
当偏移量判断 真实的数据显示到了最后一张。也就是8 滚到1的时候 ,设置回滚 ,回到默认位置,且没有动画。
另外一步处理当偏移量 小于 一个极小值 也就是 偏移即将到达 0 的是偶也就是 真实的第一张回滚到最后 一张的时候,设置默认滚动到最后一张。
最重要的一点 这个黑科技 是使用scro 滚动到特定的item所以 在触发的那一时刻,item就设定死了,scrollViewDidScroll:也就不会再滚动,因为现在的偏移量是一个唯一值。
-
- 6天可挣3万,试药人自述:如果有来生,不会选择试药,太痛苦了
-
2023-12-15 10:54:26
-
- 「推文」五本末世甜宠文,《我被反派大佬看上了》,超刺激的哦
-
2023-12-15 10:52:20
-
- 30岁以上的熟女怎么撩?说情话没用,我教你正确做法(建议收藏)
-
2023-12-14 19:52:46
-
- 中国与巴基斯坦的关系,友谊根深蒂固,到底有多么坚挺?
-
2023-12-14 19:50:40
-
- 郑州铁路局线站示意图
-
2023-12-14 19:48:34
-
- 高干军婚文:他为她改变一切,为她叱咤风云!
-
2023-12-14 19:46:28
-
- 弹壳与派克特终于握手言和了,还有多少beef选择了peace??
-
2023-12-14 19:44:22
-
- 叶问的师父陈华顺有多厉害?还在当徒弟时,就打败一代宗师黄飞鸿
-
2023-12-14 19:42:16
-
- 10个注意事项,顺利通过机场安检
-
2023-12-14 19:40:11
-
- 约克城号航母之死,被日本潜艇截杀于回家的路上
-
2023-12-14 19:38:05
-
- 小楼吹彻玉笙寒,南唐中主最有名的一首词,乱世家国,沉郁之美
-
2023-12-14 19:35:59
-
- 向华强前妻不简单,既是李小龙红颜,又能和强悍向太和平相处40年
-
2023-12-14 19:33:53
-
- (美人尖是啥意思(什么是美人尖,寓意有哪些)
-
2023-12-14 12:04:27
-
- 自卑是什么原因 自卑的根本原因是自恋,理由七个字
-
2023-12-14 12:02:22
-
- 孕妇禁吃的水果(对胎儿和孕妇都没有好处)
-
2023-12-14 12:00:18
-
- 肾部囊肿 肾脏出现囊肿等于肿瘤?会对身体有影响吗?
-
2023-12-14 11:58:13
-
- 如何桥接第二个无线路由器
-
2023-12-14 11:56:07
-
- 女性荷尔蒙失调怎么调理?做到3件事,“补”回来
-
2023-12-14 11:54:03
-
- 女人痛经的原因 为何女性会痛经?5个原因,自查下
-
2023-12-14 11:51:58
-
- 蒙药冠心七味胶囊 你的家人买过这八种药或保健品吗?
-
2023-12-14 11:49:53