常规思路流程

点击任意小图后:

1.首先制作scrollview框架:大小2个scrollview,小的用于手势缩放单一图片,大的横向依次加载全部照片

2.制作好scrollview框架后,加载照片

3.一切准备就绪跳转页面呈现给用户选择的大图

加载图片这一步,若相册内就10几张照片,那么毫无技术挑战,但是如果是300张照片呢?直接崩溃?还是让用户等待加载? 时间紧任务重,这一步需要拆分和优化。

scrollview框架需要了解下API,然后动动脑子了,这里有个小窍门,很多人都问我照片与照片间的黑边间距怎么实现,呵呵,贴下代码:

仔细想想,其实没有必要第一时间加载全部图片的高清原图,事先存好每张图配套的低分辨率图,用空间换时间。

先加载所有的图片的低分辨率图, 当用户翻阅到某一张图片时, 即时的加载原始尺寸的高清无码大图. 过程优化为:

多线程任务

即使是这样,当照片数量达到一定量时,需要消耗的时间也并非毫秒级,体验无法领人满意,  页面跳转时仍然会出现卡顿现象。

于是考虑使用多线程来进一步拆分任务, 执行跳转的同时再后台执行加载低分辨率图的步骤。

优化快速翻阅体验

通过这样的拆分,可以实现立即跳转,体验满意。但是翻阅浏览时,如果用户很快左右滑动, 出现黑屏的几率很高。 因为加载低分辨率图任务的线程可能还在进行大量IO操作,不能及时跟上。 为了完善它,要把加载低分辨率图的步骤再次分解,精益求精。

在页面跳转时间允许的范围内,加载用户选定的那张图片的高清原图的同时,尽可能多的加载几张左右临近的图片的低分辨率图。

如何加载其余的低分辨率图?

以用户点击选定的那张图为中心向两边加载,,直接想应该是两个线程一左一右的加载,再想想左右一起加载其实可以是一个循环,免了再开线程的那些耗费了。

最后
尽量减少内存占用。因为原始图片要比低分辨率图大很多, 所以当用户从一张图片翻阅到另一张图片时,  当前图片加载为原始尺寸的高清大图, 而原来那张就被替换为低分辨率图了。 虽然读写次数增多了, 但内存确实省了不少。

iOS开发:加载、滑动翻阅大量图片解决方案相关推荐

  1. iOS开发——加载、滑动翻阅大量图片解决方案详解

    目录(?)[-] 常规思路流程 使用低分辨率图 多线程任务 优化快速翻阅体验 最后还一个砍儿 加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的 ...

  2. iOS开发——加载、滑动翻阅大量图片解决方案详解 .

    加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制. 我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏 ...

  3. iOS 加载、滑动翻阅大量图片解决方案详解

    今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制. 我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏浏览界面的这短暂的1秒内(和后续的几 ...

  4. 加载、滑动翻阅大量图片解决方案详解

    加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制. 我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏 ...

  5. iOS--加载、滑动翻阅大量图片解决方案详解

    加载.滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制. 我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏 ...

  6. iOS开发之加载、滑动翻阅大量图片优化解决方案

    今天分享一下私人相册中,读取加载.滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制.我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏浏览界面的这短暂的1秒内(和后续的几秒 ...

  7. python网站打开慢_Python selenium页面加载慢超时的解决方案

    开发环境: win10-64  python2.7.16  chrome77 from selenium import webdriver driver = webdriver.Chrome(exec ...

  8. 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案

    [走过巨坑]android studio对于jni调用及运行闪退无法加载库的问题解决方案 参考文章: (1)[走过巨坑]android studio对于jni调用及运行闪退无法加载库的问题解决方案 ( ...

  9. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 将系统的 dexElements 与 应用的 dexElements 合并 | 替换操作 )

    文章目录 一.将系统的 dexElements 与 应用的 dexElements 合并 二.Element[] dexElements 替换操作 三.完整 dex 加载源码 参考博客 : [Andr ...

最新文章

  1. 分享8个非常实用但是名气不大的软件
  2. Linux配置vsftpd 服务
  3. Nginx配置段(3)
  4. C3P0连接池的运用
  5. 【NLP】使用Transformer模型进行文本分类
  6. R语言空间数据处理(part1)--基础数据操作与处理
  7. php解决与处理网站高并发 大流量访问的方法
  8. mapreduce yarn内存参数
  9. mac m1 nvm 安装node版本失败
  10. 定义输入回溯法解决0-1背包问题
  11. xpwifi热点设置android,xp系统wifi热点设置的解决方案
  12. mysql count 1_MySQL中count(1)和count(*)的区别是什么?
  13. The following packages have unmet dependencies错误
  14. 资源分享|免费注册申请永久的eu.org顶级域名创建属于自己的域名,再也不用给博客域名续费了!...
  15. 【Android视频 之 阿里云视频播放器 二】
  16. python psutil下载安装_windows 利用pip 安装python psutil 模块
  17. linux日志切割命令,Linux 服务器log日志切割三种方法【附命令行】
  18. python 定义list长度_python中list列表的高级函数 python如何统计列表的长度
  19. 上班迟到,单位能按员工手册罚款吗?
  20. 废除金本位:银行家赋予罗斯福的历史使命

热门文章

  1. 杀手皇后 JoJo奇妙冒险 漫画人物3d模型
  2. linux系统日志怎么退出,linux系统日志的清除
  3. Linux 查看进程状态
  4. 3 为什么考研?该做那些准备 --绝密,程序员大厂面试求职大揭秘!
  5. 北航计算机学院博士开题,关于硕士生、博士生开题报告的通知及规定-北航电子信息工程学院...
  6. (附源码)计算机毕业设计SSM流浪动物管理系统
  7. 马薇薇论阴天期盼太阳
  8. NEIL: Extracting Visual Knowledge from Web Data 论文笔记
  9. C语言入门:立体几何计算题
  10. Arcgis Engine 实现单波段栅格图层色带渲染(包括色带反转)