美文网首页iOS-开发天生不是作曲家
三张UIImageView实现无限轮播

三张UIImageView实现无限轮播

作者: 小黑_Coder | 来源:发表于2016-06-10 21:59 被阅读240次

对于前端工程师来说,在开发中常需要对广告或者是一些图片进行无限轮播。

最简单的一种做法


使用一个UIScrollView,在UIScrollView上面添加多个imageView,然后将UIScrollView的滚动范围设置为 (图片张数+1)* 图片宽度 (ps:如果想左右都无限轮播则将UIScrollView的滚动范围设置成(图片张数+2)*图片宽度),然后设置定时器回调方法改变ScrollView的偏移量。

简图

一般而言,轮播的广告图片数量多是3~5张。所以,在设计过程中并不会太多的去考虑轮播图的开销问题。但是如果图片过多,比如有16张图片,就需要创建16个imageView,此时就不得不考虑性能问题了。更甚,如果我们设计一个图片浏览器,那可能会处理成百上千张图片,依然采取上面这种设计方式,这会造成极大的内存浪费且性能低下。

简图


我们假设一种场景让大家更容易理解此种设计方式的缺陷,用户看到UIImagView1的是时候,失去了继续往下看的兴趣。此时后面的7张创建的时间太早,且用户可能根本就没机会看见。大家在想,如果加载的是网络图片,那是一件相当浪费流量的事情。

有人不经要问,既然存在这么多的问题。那我们该如何优化呢?

这就是我们今天要重点介绍的三张UIImageView实现无限轮播

三张UIImageView

设计思路:只有在需要用到的时候,再创建,创建的imageView进行循环利用。不论有多少张图片,只需要创建3个imageView就够了。

简图


主要逻辑流程图


将三张UIImageView固定在UIScrollView上,每次timer回调改变scrollView的偏移量(ps:每次偏移一个UIImageView的宽度),在UIScrollView的代理方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView中监测偏移量。当偏移量大于等于2*图片宽度时,说明屏幕可视区域显示的右边UIImageView,此时我们将左边UIImageView的图片换成中心UIImageView的图片。中心UIImageView的图片换成右边UIImageView的图片,换完图片后,中心UIImageView的图片和右边UIImageView的图片一样,此刻我们悄悄改变(无动画,骗过用户的眼睛)scrollView的偏移量,将中心UIImageView显示在屏幕可视区域。最后给右边UIImageView重新设置图片。以上是向右轮播。向左轮播同理。

没有代码展示总是感觉缺点什么,因此我也写好了一个demo放在了个人的github上。欢迎交流。

https://github.com/LHCoder2016/LHCarouseTools.git

相关文章

网友评论

    本文标题:三张UIImageView实现无限轮播

    本文链接:https://www.haomeiwen.com/subject/qzpsdttx.html