UIScrollView极限优化:两个UIImageView循环利用
来源:互联网 发布:iphone7值得买吗 知乎 编辑:程序博客网 时间:2024/06/10 14:09
iOS开发中,UIScrollView在大部分情况下,用for循环往里面直接塞UIImageView就OK了。但是如果需要展示的图片非常多,比如十张,几十张,甚至上百张,直接往UIScrollView里面塞上百的UIImageView肯定是行不通的。明显需要优化。
UIScrollView在不滚动的时候,只会有一张图出现在视野中,滚动的时候同一时刻也最多只会有两张图出现在视野中。如图所示。既然同一时刻最多只会有两张图在视野中,那么也既是同一时刻我们需要的imageView最多只要两个就够了,其他的就算添加到了scrollView中也看不到。
一张图
两张图
根据以上分析,可以建立容器reusedImageViews
来存放可以重用的imageView,建立容器visibleImageViews
来存放在视野范围内的imageView。
当scrollView第一次出现的时候,首先需要在屏幕中显示一张
完整的图,此时做两件事。
- 将视图1添加到scrollView.
- 将视图1添加到
visibleImageViews
进行保存.
一张图->两张图
如果向左滑动,会出现两张图
的情况,视图2也需要加入显示,当开始滑动的那一刻,做三件事。
- 到
reusedImageViews
中查找可重用的imageView,如果没找到,则新建一个。假设得到的是视图2。 - 将视图2添加到
visibleImageViews
进行保存,如果视图2是在reusedImageViews
中找到的(不是新建的),那么需要将视图2从reusedImageViews
中移除。相当于将视图2从reusedImageViews
移动到了visibleImageViews
。 - 将视图2添加到scrollView中,并进行一些个性设置,比如位置,图片等。
两张图->一张图
如果继续像左滑动,直到视图1看不见的那一刻,也做三件事。
- 视图1调用
removeFromSuperview
从scrollView中移除. - 将视图1放进
reusedImageViews
中等待被重用 - 将视图1从
visibleImageViews
中移除,因为它已经属于reusedImageViews
了。
如果再继续滑动,则又回到了一张图->两张图
的情况,以此类推,利用重用进行优化的目的就达到了。以下是测试输出(不包含垂直和水平的滚动条),通过子视图地址和子视图个数可以看到,无论怎么滚动,scrollView中只会存在两个imageView。
看代码也许会更有感觉一点。狂戳这里,下载demo。
Done!
Posted by吴高君•Jun6th,2015 6:29 pm•ios
0 0
- UIScrollView极限优化:两个UIImageView循环利用
- UIScrollView极限优化:两个UIImageView循环利用
- UIScrollView极限优化:两个UIImageView循环利用
- iOS中UIScrollView极限优化:两个UIImageView循环利用
- iOS UIImageView利用UIScrollView实现图片循环滚动
- Swift 利用UIScrollView和两个UIImageView实现图片轮滚
- UIScrollView subviews多了两个UIImageView
- UIScrollView利用NSTimer附带UIPageControl自动循环
- UIButton UIImageView UIScrollView UIWebView
- UIScrollView 循环
- 利用两个视图实现图片循环利用
- 利用UIScrollView实现循环滚动翻页的方法
- 利用UIScrollView实现循环滚动翻页的方法
- iOS 编程 利用UIScrollView 编写无缝循环显示图片
- 笔记:循环的极限
- 两个重要极限
- 两个重要极限
- UIImageView根据UIScrollView的中心点进行缩放
- 使用history.replaceState 控制微信返回
- Almost Union-Find UVA 11987
- 网页传输乱码怎么办?
- BZOJ4385: [POI2015]Wilcze doły
- 安卓获取所有应用程序,进程
- UIScrollView极限优化:两个UIImageView循环利用
- MT6580/8321进摄像头白屏现象
- 有关拍照并获取图片显示出来的问题
- 如何锁定Xcode的头文件
- 多元函数求极值问题
- Fragment使用详解
- 阿里云ECS使用
- Android之SurfaceView学习(一)
- 字符编码全总结