无限轮播图片的实现原理

无限轮播图相信是很多开发人员常用的一个功能,这里总结一下常用的两种方式的实现原理

一、使用UIScrollview实现无限轮播
  用UIScrollView实现,在scrollView上添加3个UIImageView,分别用来显示上一张图片,当前显示的图片,下一张图片。scrollView在不滑动的时候永远显示当前图片(第二张图片)即contentOffset = CGPointMake(scrollViewW,0),在滑动的时候可以预览部分上一张图片或下一张图片。现在以向左滑动为例,因为已经设置好三张图片,我们向左滑动可以看到下一张图片的一部分(此时屏幕显示着部分当前图片和部分下一张图片)。如果完成了向左滑动,在UIScrollView的代理方法 scrollViewDidEndDecelerating:里 将三个UIImageView上显示的图片更换(下标一次+1),此时第二个imageView显示的就是之前的第三个imageView上的图片,最后将scrollView的偏移量拉回到第二张图片上[scrollView setContentOffset:CGPointMake(bannerScrollViewW, 0) animated:NO]
    
            

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

{

    NSInteger leftIndex;

    NSInteger rightIndex;

    if (scrollView.contentOffset.x == bannerScrollViewW * 2) {

        /** 向左滑  计算 左 中 右 的下标索引*/

        leftIndex = self.centerIndex % self.imageNames.count;

        self.centerIndex = (self.centerIndex+1) % self.imageNames.count;

        rightIndex = (self.centerIndex +1) % self.imageNames.count;

        //NSLog(@"往左滑");

    }else if (scrollView.contentOffset.x == 0) {

        /** 向右滑  计算 左 中 右 的下标索引*/

        rightIndex = self.centerIndex;

        self.centerIndex = (self.centerIndex - 1) < 0?(self.imageNames.count - 1):(self.centerIndex - 1);

        leftIndex = (self.centerIndex - 1) < 0?(self.imageNames.count - 1):(self.centerIndex - 1);

        //NSLog(@"往右滑");

    }else{

        // 没有滑走 什么都不做,直接return

        return;

    }

    /** 设置图片 */

    self.leftImageView.image = [UIImage imageNamed:self.imageNames[leftIndex]];

    self.centerImageView.image = [UIImage imageNamed:self.imageNames[self.centerIndex]];

    self.rightImageView.image = [UIImage imageNamed:self.imageNames[rightIndex]];

    /** 设置pageControl currentPage  因为永远显示中间的图片,故此currentPage=centerIndex */

    self.pageControl.currentPage = self.centerIndex;

    // 将 bannerScrollView 拉回到中间图片的位置 显示图片

    [scrollView setContentOffset:CGPointMake(bannerScrollViewW, 0) animated:NO];

}

二、使用UICollectionView实现无限轮播
  N张照片把contentsSize设置为N+2个图片的宽度,例子如下,两端填充如图,当处于一端时,且即将进入循环状态的时候,如第二张图,从状态1滑动到状态2,在滑动结束的时候,将当前的位置直接转到状态3,直接setContentOffset神不知鬼不觉,视觉上是循环的。
注意:这里不能使用- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;当我们滑动cell是是无法触发这个函数的,虽然它是动画结束后就可以触发,但是它指的动画是系统原生动画,如我们的手动滑动是无法触发该函数的。
总结源自:
  http://www.jianshu.com/p/7123a07cc552

转载于:https://www.cnblogs.com/jingxin1992/p/7144729.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开启 JM 的 trace 功能

[JM代码] 开启 JM 的 trace 功能本帖最后由 firstime 于 2009-6-15 11:16 AM 编辑 城里汉子说过&#xff1a; trace文件对分析码流结构很有效。我说的是trace文件&#xff0c;不是一步一步跟踪&#xff0c;就是编解码同时生成的 trace_enc.txt 这个文件&#xff0c;里面对每个比…

kafka入门介绍(转载)

Kafka作为一个分布式的流平台&#xff0c;这到底意味着什么&#xff1f; 我们认为&#xff0c;一个流处理平台具有三个关键能力&#xff1a; 发布和订阅消息&#xff08;流&#xff09;&#xff0c;在这方面&#xff0c;它类似于一个消息队列或企业消息系统。 以容错的方式存储…

Cmd Markdown 编辑阅读器

欢迎使用 Cmd Markdown 编辑阅读器 我们理解您需要更便捷更高效的工具记录思想&#xff0c;整理笔记、知识&#xff0c;并将其中承载的价值传播给他人&#xff0c;Cmd Markdown 是我们给出的答案 —— 我们为记录思想和分享知识提供更专业的工具。 您可以使用 Cmd Markdown&…

Ubuntu GitLab CI Docker ASP.NET Core 2.0 自动化发布和部署(1)

相关博文&#xff1a; Ubuntu 简单安装和配置 GitLabUbuntu 简单安装 DockerUbuntu Docker 简单安装 GitLabUbuntu Docker 安装和配置 GitLab CI 持续集成服务器版本 Ubuntu 16.04 LTS。 经过上面四篇博文中的相关安装和配置&#xff0c;我们主要完成了两个容器的创建和运行&am…

django-ckeditor表情包修改

一、版本 Django1.11django-ckeditor5.2.2 二、关键步骤 1.删除旧的ckeditor静态文件 所在目录&#xff1a;项目目录下的static文件夹下的ckditor文件夹 rm ckeditor -rf 原因&#xff1a;在安装ckeditor后需要执行collectstatic命令&#xff0c;这个过程中的查找静态文件会去…

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.2.2 如何读入文本输入

2.2.2 如何读入文本输入 最简单的处理任意文本的方式就是使用在卷Ⅰ中我们广泛使用的Scanner类。我们可以从任何输入流中构建Scanner对象。或者&#xff0c;我们也可以将短小的文本文件像下面这样读入到一个字符串中&#xff1a; 在早期的Java版本中&#xff0c;处理文本输入的…

amap不同样式marker点_想出一手漂亮的图,CAD打印样式表你必须会!

好课推荐&#xff1a;1.CAD2014&#xff1a;点击查看2.室内CAD&#xff1a;点击查看3.CAD2019&#xff1a;点击查看4.CAD2018&#xff1a;点击查看5.【bim】revit&#xff1a;点击查看6.室内手绘&#xff1a;点击查看7.CAD三维&#xff1a;点击查看8.全屋定制&#xff1a;点击查…

研究人员发现Office Word 0Day攻击 这个漏洞绕过了word宏安全设置 绿盟科技、McAfee及FireEye发出警告...

这次的0Day漏洞确实很厉害&#xff0c;以往攻击者诱使用户点击Word文档&#xff0c;由于其中包含了恶意脚本&#xff0c;大多数需要用户启用了宏。但这次的漏洞不是&#xff0c;受害者无需启用宏&#xff0c;也会中招&#xff0c;而且漏洞覆盖Windows所有版本&#xff08;包括W…

数据中心传输需求成以太网市场巨大推动力

近日&#xff0c;市场研究机构Infonetics作出评估称&#xff0c;数据中心以太网市场将迎来全面发展的势头&#xff0c;其驱动力则在于当前数据中心以太网络交换接口由10Gbps产品向25Gbps乃至50Gbps标准的大规模升级。 根据对2014年第三季度的市场销售情况研究&#xff0c;该公司…

主打“云安全” 迅雷系帝恩思登陆新三板

ZD至顶网安全频道 06月14日 综合消息&#xff1a; 6月14日上午&#xff0c;帝恩思(837018)敲响了登陆新三板的钟声。作为帝恩思的重要股东&#xff0c;迅雷&#xff08;NASDAQ:XNET&#xff09;CEO邹胜龙与帝恩斯董事长王宇杰、总经理许渊培等人一同参加了这一仪式。 帝恩斯是一…

UESTC 1636 梦后楼台高锁,酒醒帘幕低垂

题意&#xff1a;求一条路径&#xff0c;使得这条边连接1到n&#xff0c;求边权值的最大值与最小值的差 题解&#xff1a;最小生成树&#xff0c;对边权排序&#xff0c;可以枚举边的最大和最小的值&#xff0c;判断能否使得1和n连通 #include <bits/stdc.h> #define ll …

WORD列表缩进的文本起始点

Figure 1 Figure 2 Figure 3 编号位置以刻度尺为起点0.74厘米&#xff08;2个字符间距&#xff09;&#xff0c;文本缩进以刻度尺为起点2.96厘米&#xff08;8个字符间距&#xff09; 以上两者相减得到的值正好特殊格式悬挂缩进的值2.22厘米 Figure 4 上图看到&#xff0c;文本…

无人车火了 百度是如何做到的?

ZD至顶网服务器频道 03月02日 新闻消息&#xff08;文/于泽&#xff09;&#xff1a;百度无人车可谓狠狠的吸足了大众的眼球。一个问题逐渐出现在我们心中&#xff0c;为什么百度这样的互联网企业会推出无人车&#xff0c;似乎搜索引擎和无人车之间的关联度并不是很高。 谜题的…

Docker Compose 项目

二、Docker Compose 项目compose项目简介compose项目来源于之前的Fig项目&#xff0c;使用python代码编写。compose项目主要用于编排部署基于docker的应用。本身与docker&#xff0f;swarm配合度很高。Docker Compose 是 Docker 编排服务的一部分&#xff0c;可以让用户在其它平…

android 获取sd卡目录失败_树莓派对SD卡的大小,速度有哪些要求?

SD卡容量的大小通过NOOBS安装带有桌面和推荐软件&#xff08;完整&#xff09;的 Raspberry Pi OS&#xff0c;SD卡最小为16GB。 对于带有桌面和推荐软件的 Raspberry Pi OS 镜像安装&#xff0c;SD卡最小为8GB。对于安装 Raspberry Pi OS Lite&#xff0c;建议 SD 卡最小为4GB…

区分同源与非同源

2019独角兽企业重金招聘Python工程师标准>>> JSONP和AJAX相同&#xff0c;都是客户端向服务器端发送请求&#xff1a;1、给服务器端传递内容2、从服务器端获取数据 的方式 AJAX属于同源策略 JSONP属于非同源策略(跨域请求) -> 实现跨域请求的方式有很多种&#x…

Spring MVC-表单(Form)标签-下拉框(Dropdown)示例(转载实践)

以下内容翻译自&#xff1a;https://www.tutorialspoint.com/springmvc/springmvc_dropdown.htm 说明&#xff1a;示例基于Spring MVC 4.1.6。 以下示例显示如何使用Spring Web MVC框架在表单中使用Dropdown。首先&#xff0c;让我们使用Eclipse IDE&#xff0c;并按照以下步骤…

阿里巴巴中文站架构设计实践(何崚)图书

阿里巴巴中文站架构实践 何崚阿里巴巴 全文地址:阿里巴巴中文站架构设计实践(何崚).pdf 更多课件可到:这里查看 后续内容还在更新…

bilibili go框架_最好的开发语言一定是那位吗?Go语言有话说

鲁迅先生说过&#xff0c;所有能用 JS 写的前端项目最终都会被用 JS 重写一遍&#xff0c;所有能用 Go 写的后端项目最终也都会被用 Go 重写一遍。作为一名开发者&#xff0c;周六的我们能做什么呢&#xff1f;是因为产品经理的各种需求在加班吗&#xff1f;给你说了实现不了实…