3分钟快捷创建高性能轮播图
概要:封装轮播图,混合加载网络图片和本地图片,实现UIImageView、UILabel的复用,使用内存缓存,磁盘缓存、多线程和runloop解决UI卡顿,定时器等问题。暂时未发现有任何bug,如果您遇到bug希望你能Issues我。
SLBannerViewDemo:https://github.com/TravelColor/SLBannerView
个人邮箱:songleitravel@163.com
****************************
//支持cocoapods
pod 'SLBannerView'
或者
pod 'SLBannerView', '~> 1.0.2'
****************************
思路及改进说明:
1. 构建基本UI
1.1 封装
2. 设置scrollView代理
3. 添加scrollView的image
4. 分页
5. 定时器滚动起来
6. 定时器线程阻塞问题:
原因:NSTimer 默认是放到系统的主线程的,当用户操作其他主线程任务时,会造成NSTimer的线程阻塞,用户停止其他操作时又会重启NSTimer
解决:设置timer在runloop中模式为CommonModes
7. 解决轮播图片过多的性能问题,循环重用ImageView
8. 添加xib创建方法
9. 巧用代理UIScrollViewDelegate,scrollViewDidScroll:定位当前正确的页数,找出最中间的哪个图片控件
10. 用SLBannerViewDelegate实现监听点击事件
11. 利用继承、内存缓存、磁盘缓存、异步并行多线程解决重复下载图片,UI不流畅的问题。先检查内存、磁盘中有没有,没有再下载,有就直接使用。
12. 修复bug,让其默认从第0页开始,给self.pageCtrl.currentPage = 0;,[imageView asynSetImage:self.slImages[0]];
13. 修复bug, 让其加载完成,就展示第二个imageView: self.scrollView.contentOffset = CGPointMake(BannerViewWidth, 0);
下载地址:http://www.wenjiangs.com/wp-content/uploads/2021/docimg35/d51a15931b46ec55635ece75249f44b8.zip
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论