iOS_ UIScrollview_无限循环

IOS:UIScrollView 自动滑动翻页功能 这个功能不算难,找这篇文章,说明你的scrollViewyi'jing'zuo'hao'le 阅读详情



无限循环:


我们都知道UIScrollView有一种很流畅的切换效果,结合UIPageControl的辅助展示效果,就可以完成一个很不错的产品介绍功能页面。那么像一些购物app中,商品展示页面无限滚动的效果是如何实现的呢?


方法1:前后+1方法,这也最常见的一种做法。假如我们有四张需要展示的图片,我们创建了一个数组来保存图片名字,此时数组中保存的是按顺序的1.png,2.png,3.png,4.png,这四个图片名字。要实现无限循环的效果,我们需要改动一下这个数组为:4.png,1.png,2.png,3.png,4.png,1.png,我们发现在原来数组的前后分别加入了一个图片名字,即将要循环展示的下一张图片的名字。当你滑动到4.png的时候,下一张会是1.png。当你在1.png往回滑动的时候,将要出现4.png。


好了,下面是我们的核心内容:我们发现目前数组中有6个图片,当我们从3.png滑动到4.png,又从4.png滑动到1.png的时候,我们要神不知鬼不觉的迅速切换到排在第二位的1.png。反向滑动的时候也是如此,从1.png滑动到4.png的时候,我们要神不知鬼不觉的切换到拍到倒数第二位的4.png。那么怎么样才能实现神不知鬼不觉呢?


看下面这两个UIScrollView的实例方法:

[objc]  view plain copy
  1. - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;  
  2. - (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated;  

这两个方法可以在animated参数为NO的时候,帮助我们迅速切换视图。


当每一次滑动结束的时候,UIScrollViewDelegate会有一个回调方法:

[objc]  view plain copy
  1. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;  

 

此时我们来检测是否是滑动到了我们将要出发的1.png和4.png,如果是的话,那么就悄悄调用上面两个方法中的任意一个来实现视图切换。

实现代码如下所示:

[objc]  view plain copy
  1. int currentPage = (int)self.scrollView.contentOffset.x/320;  
  2. if (currentPage==0)  
  3. {  
  4.     [self.scrollView scrollRectToVisible:CGRectMake(3320 * [slideImages count]-2,0,320,460) animated:NO]; // 序号0,跳转到最后1页  
  5. }  
  6. else if (currentPage==[slideImages count]-1)  
  7. {  
  8.     [self.scrollView scrollRectToVisible:CGRectMake(320,0,320,460) animated:NO]; // 最后+1,循环第1页  
  9. }  


方法2:瞒天过海。此方法中无论数据源有多少个,UIScrollView只保留其中三个视图,其实这是方法1的变种。当你滑动UIScrollView的时候,无非是向前滑动,或者是向后滑动,所以能够组成无限循环的基本条件就是前、中、后 三个视图。当你每次滑动的时候我都神不知鬼不觉的切换一下这三个视图。这也是和方法1 的最主要区别。


看看下面的区别:

[objc]  view plain copy
  1. - (void)scrollViewDidEndDecelerating:(UIScrollView *)aScrollView {  
  2.       
  3.     [_scrollView setContentOffset:CGPointMake(_scrollView.frame.size.width, 0) animated:YES];  
  4.       
  5. }  

我们发现每一次滑动完成之后,UIScrollView总是重新切换回默认的中这一个视图。下面这个代理方法将要实现重置这三个视图:

[objc]  view plain copy
  1. - (void)scrollViewDidScroll:(UIScrollView *)aScrollView {  
  2.   
  3.     int x = aScrollView.contentOffset.x;  
  4.     //往下翻一张  
  5.     if(x >= (2*self.frame.size.width)) {  
  6.         [self loadData];  
  7.     }  
  8.     //往上翻  
  9.     if(x <= 0) {  
  10.         [self loadData];  
  11.     }  
  12. }  

loadData() 的实现原理非常简单,现将UIScrollView的所有视图移除,在重新根据数据源绘图来加载到UIScrollView中。

[objc]  view plain copy
  1. - (void)loadData  
  2. {      
  3.     //从scrollView上移除所有的subview  
  4.     NSArray *subViews = [_scrollView subviews];  
  5.     if([subViews count] != 0) {  
  6.         [subViews makeObjectsPerformSelector:@selector(removeFromSuperview)];  
  7.     }  
  8.           
  9.     for (int i = 0; i < 3; i++) {  //只有3个视图  
  10.         UIView *v = [_curViews objectAtIndex:i];  
  11.         v.frame = CGRectOffset(v.frame, v.frame.size.width * i, 0);  
  12.         [_scrollView addSubview:v];  
  13.     }  
  14.       
  15.     [_scrollView setContentOffset:CGPointMake(_scrollView.frame.size.width, 0)];  
  16. }  

至于你怎么绘图就是你的事情了,我这里只是简单的分析一下。


自动无限循环


刚才讲解了无限循环的两种不同实现方法,下面来讲解一下如何让它自动滑动。我想大家都用过NSTimer,没错,用它来实现简单的计时器最好不过了。


在适当位置初始化一个NSTimer,设定3秒执行一次runTimePage()方法:

[objc]  view plain copy
  1. // 定时器 循环  
  2.  [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(runTimePage) userInfo:nil repeats:YES];  

 

在runTimePage()方法中,我们将要实现获取当前page页数,然后跳转到下一个page。

[objc]  view plain copy
  1. - (void)runTimePage  
  2. {  
  3.     int page = pageControl.currentPage; // 获取当前的page  
  4.     page++;  
  5.     pageControl.currentPage = page > [slideImages count]-2 ? 0 : page ;  
  6.     [self.scrollView setContentOffset:CGPointMake(320*(page+1),0) animated:YES];  
  7. }  

是不是很简单呢~~

贴出几个参考demo地址,有兴趣的同学可以去看看。以上分析仅供参

UIScrollView 无限自动循环 UIScrollView 无限自动循环 类似商品推荐产品图无限循环,配合UIPageControl使用 立即下载

相关推荐

UIScrollView滚动视图的无限循环切换,自动顺序,逆序图片播放

UIScrollView滚动视图的无限循环切换,定时器的自动顺序,逆序图片播放

iOS解析--自动无限循环UIScrollView原理

今天下午突然想起来上一次的面试经历,当时我是去面试美丽说IOS工程师....

学习小使者 的专栏 1万+

SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)

用户提了个需求,让我批量导入内部订单几百个内部订单。我本打算用写段ABAP 代码来调用 BAPI (BAPI_INTERNALORDER_CREATE)就可以了。但想到我很久没有用过LSMW 了,都快要忘记了。于是我采用LSMW的方式,完成了任务。并把过程记录下来,形成教程方便我以后回头查看,分享出来也希望对大家有帮助。

IT小职员 2万+

iOS UIScrollView ,UIPageControl实现无限循环翻页

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34024034的博客 380

保姆级教程:用vxe-grid给管理后台加个「智能筛选」功能(支持模糊搜索/多选/范围查询)

本文提供了一份详细的Vxe-Grid智能筛选功能实现教程。通过自定义筛选器渲染,文章逐步指导开发者为后台管理系统添加支持模糊搜索、多选下拉和数值范围查询的智能筛选功能,并分享了性能优化与移动端适配等实战经验。

weixin_29021291的博客 536

LabVIEW与MySQL的连接:软件下载与安装至UDL文件创建全过程

依据个人经验编辑的十分完备的使用教程

tiaowudexiaoyu的博客 5573

iOS之scrollView分页无限滚动框架

好多APP都有首次启动显示内容介绍的滑动页面,或者进入APP后界面上部显示的广告栏,那么这些控件的代码编写是不是很繁琐,不怕!今天给大家介绍我写的一套框架,可以直接拿来用,分分钟实现一个无限滚动的广告栏,如下图 •新创建一个UIView类.h文件#import <UIKit/UIKit.h>@interface GDGInfiniteScrollView : UIView@property(str

iOS鸽子的技术博客 1660

UE5垃圾回收优化实战:定位GC卡顿与内存泄漏

垃圾回收(GC)是Unreal Engine 5中保障UObject内存安全的核心机制,其基于引用图的标记-清除原理决定了性能高度依赖引用结构合理性。当GC频繁触发或单次耗时突增,往往映射出蓝图强引用冗余、C++根对象管理失控或资源生命周期设计缺陷等底层问题。技术价值在于降低主线程阻塞、稳定60帧体验、抑制内存异常增长;典型应用场景包括关卡切换卡顿、UI打开后持续GC、打包后内存不释放等。本文聚焦UE5特有的Full GC模式、UObject生命周期约束及GC触发时机不可见性,提供从蓝图变量规范、TSoft

weixin_31995251的博客 362

UIScrollview之无限循环滚动

在UIScorllView控件中放置其他的控件,通过控制contentSize之后这些图片就可以滚动,要实现循环滚动的方法是在第一张前面放置的是最后一张图片,在最后一张后面放置第一张的图片,假如你有n张图片,实际上在UIScorllView中有n+2张图片,你有3张图片,只要使用5个UIImageView依次存放:图片3,图片1,图片2,图片3,图片1。当从图片1滚动到图片3时由于最后一张是图片1

lfx511022的专栏 907

【AI智能体】Codex 生成高质量电商套图实战操作详解

Codex 生成高质量电商套图实战操作详解

congge 4523

仿真学习系列(四十一):Sigrity仿真之PDN阻抗提取

电源分配网络(Power Distribution Network,简称PDN)是电子系统中至关重要的部分,主要用于将电源从电源输入端传输到各个组件。PDN的设计质量直接影响到系统的电源完整性和信号稳定性,尤其是在高速设计中,PDN的阻抗特性对电源噪声、地弹(ground bounce)和电源完整性(Power Integrity,简称PI)具有重要影响。

案例文章,高速信号 1133

IOS之UIScrollView分页无限循环滚动框架

IOS之UIScrollView分页无限循环滚动框架1原理先定义3个imageView分别为中间图片视图 midView丶左边图片视图leftView丶右边图片视图rightView,将要展现出来的图片放到一个imageNames数组中,

liuchao940303的博客 970

手把手教你学Simulink——电机电磁兼容与可靠性场景示例:基于Simulink的电机噪声抑制控制仿真

本文带你完成了电机噪声抑制控制的Simulink仿真,实现了:✅ 揭示了电磁噪声从电流到声音的传递机理✅ 搭建了含死区、固定载波等噪声源的高保真模型随机PWM(消除啸叫)谐振控制器(抑制5/7次嗡鸣)谐波注入(降低THD) ✅ 通过综合方案将噪声降低10 dB以上(感知响度减半!) ✅ 为产品静音品质提升提供可落地的控制方案。

MHD0815的博客 94

android scrollview 无限循环,iOS UIScrollView滚动视图/无限循环滚动/自动滚动的实例代码...

我们都知道UIScrollView有一种很流畅的切换效果,结合UIPageControl的辅助展示效果,就可以完成一个很不错的产品介绍功能页面。下面给大家分享iOS UIScrollView滚动视图/无限循环滚动/自动滚动功能,具体代码如下所示;#define WIDTH [[UIScreen mainScreen] bounds].size.width#define HEIGHT [[UIScr...

weixin_34489089的博客 438

解决宿主机Ping不通虚拟机的问题

在使用虚拟机的过程中,我们常常会遇到宿主机和虚拟机之间无法相互通信的问题。具体来说,我们要查看虚拟机和宿主机的 IP 地址,然后尝试进行 Ping 测试。在某些情况下,我们可能发现 Ping 虚拟机不通,接下来我将分享如何解决这个问题。

howard2005的专栏 7万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

iOS使用UIScrollView实现无限循环轮播图

// // ViewController.m // 无限轮播 // // Created by limin on 17/8/23. // Copyright © 2017年 none. All rights reserved. // #import "ViewController.h" @interface ViewController () /* 定时器 */ @property(n

Leemin_ios的博客 1942

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IOS---UIScrollView(无限循环滚动)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34255055的博客 281

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android scrollview 无限循环,iOS-UIScrollview无限循环

UIScrollview,顾名思义,就是一个可以滚动的视图,他的父类是UIView,在开发过程中经常会用到,例如常用的IUTableView就是他的子类.UIScrollview有很多property,这里我们挑一些常用的方法和属性.如图1.11.1contentSize、contentInset、contentOffset在开发中会经常使用,为了帮助大家理解这里以图形的形式展现三者之间的关系:1...

weixin_29557457的博客 342

iOS-实现UIScrollview的无限循环滑动(转载自Kenshin Cui's Blog)不过感觉快速滑动还是有缺陷啊

UIScrollView实战 前面介绍了iOS中UIKit的一些简单知识,这里我们一起利用前面的知识做一个例子--图片无限循环滚动。在这个例子中我们需要解决如下两个问题: 如何无限循环? 我们知道在UIScrollView中如果放置其他控件后,只要设置contentSize之后这些图片就可以滚动。如果要让图片无限循环那么只有两种办法,一种是无限循环叠加图片,另一种就是如果最后一张

梦从这里启航,代码改变世界 3275

iOS开发学习--纯代码 UIScrollView 无限循环的实现——代码类封装

一个简单的利用UIScrollView 实现的无线滚动banner,下面的代码实现,因为封装问题,对两个及一下的view 支持出了一点问题(view是传参进来的,不可以生成两份),但是原理是正确的,智者见智吧 先说一下原理,看下面的图 第一种原理 , 本文是用的原理 为了方便看懂,这里做了2张动图 下面是解析图 第二种原理...

diansuoku1565的博客 268

iOS UIScrollView无限循环滚动和手动滚动

项目中的引导页或者主页经常会让展示一个滚动的视图,这种简单的实现大家应该都会,就是一个UIScrollView加上一个UIPageControl来实现,但是当你的经理会提一些新的需求,要求你实现自动滚动并且也能手动滚动的时候,你就需要自定义来实现了。

qwert658的博客 4190

iOS开发-UIScrollView图片无限循环

关于UIScrollView图片浏览的例子有很多,之前也写过类似方面的文章,关于UIScrollView的图片循环在新闻类的App基本上是比较常见的一种情况就是图片浏览,然后根据不同的图片显示不同的内容显示不同的图片的介绍,因为属于比较常用的空间,先来看下需要实现的效果: 小圆点指示器是通过UIPageControl实现的,图片循环通过UIScroll...

weixin_33881753的博客 116

ios之实现自动无限循环滚动视图(1)

多张图片实现无限循环滚动的轮播图

小姚的博客 6506

双串锂电池主动均衡方案:MP2642GR-Z与PIC18F4458协同设计

锂电池组电压不一致是影响续航、安全与寿命的核心问题,其本质源于单体电芯老化差异与采样误差累积。实现高精度均衡需兼顾电压采样分辨率(≤2mV)、均衡电流可控性(0.1–1.2A)及系统长期稳定性。传统被动均衡无法修复容量差,而高端主动方案常受限于成本与功耗。本文聚焦双串锂电场景,以MP2642GR-Z高精度模拟前端与PIC18F4458低功耗USB MCU协同架构为例,解析如何在小体积、低成本约束下达成±2mV采样精度与μA级待机功耗,适用于便携医疗设备、户外电源及工业传感器节点等对电池一致性要求严苛的嵌入式

weixin_34297704的博客 142

UIScrollView中的contentView无限循环 - iOS开发

实现思路: 1.scrollView的contentSize是3倍的scrollView宽度大小。 2.第一次加载UIScrollView时,UIScrollView已经做了一次便宜,显示的是第二个contentView。 3.通过- (void)scrollViewDidScroll:(UIScrollView *)scrollView方法,实时通过- (void)replaceObjec

qinguo2000的专栏 546
上一篇: iOS_开发_工具_Terminal命令
下一篇: iOS_Mac操作问题
wzr0617
博客等级 码龄15年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值