UIscrollView和UIPageControl的循环滚动
因为昨天在网上找了很久,很多只能实现向右滚动,而且一张图一个imageview ,感觉工作量很可怕啊 , 下面的例子就是不论你多少图 , 只和我代码里面的几个数值有关, 只需要修改分页和循环i的最大值,当然为了方便 , 您最好把图片的名字改成有序的 。 方便您添加到可变集合中。
如果这样的页面你有五页 或则更多都可以实现好像从最后一张图跳到第一张图。
这个其实总共只有3个image,图都是用循环加进去的 。
上代码
- #import <UIKit/UIKit.h>
- #define WIDTH self.view.bounds.size.width
- #define HEIGHT self.view.bounds.size.height
- @interface ViewController : UIViewController<UIScrollViewDelegate>
- @property(strong,nonatomic) UIScrollView *scrollview;
- @property(strong,nonatomic) UIPageControl *pagecontrol;
- //存储图片
- @property(strong,nonatomic) NSMutableArray * imageArray;
- //当前页码
- @property(assign,nonatomic) int currentPage;
- //存储图片
- @property(strong,nonatomic) UIImageView * firstImage;
- @property(strong,nonatomic) UIImageView * secondImage;
- @property(strong,nonatomic) UIImageView *thirdImage;
- @end
- #import "ViewController.h"
- @interface ViewController ()
- @end
- @implementation ViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- self.scrollview=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 20, WIDTH,HEIGHT )];
- self.scrollview.contentSize=CGSizeMake(WIDTH*3, 0);
- //是否分页
- self.scrollview.pagingEnabled=YES;
- //添加代理
- self.scrollview.delegate=self;
- //隐藏滚动条
- self.scrollview.showsHorizontalScrollIndicator=NO;
- [self.view addSubview:self.scrollview];
- self.pagecontrol=[[UIPageControl alloc]initWithFrame:CGRectMake(WIDTH/5*3, HEIGHT/5*4, WIDTH/3, 40)];
- //设置当前页
- self.pagecontrol.currentPage=0;
- //分页
- self.pagecontrol.numberOfPages=5;
- //指定页码颜色
- self.pagecontrol.currentPageIndicatorTintColor=[UIColor redColor];
- self.pagecontrol.pageIndicatorTintColor=[UIColor blueColor];
- [self.view addSubview:self.pagecontrol];
- //初始化存储图片的集合
- self.imageArray=[NSMutableArray array];
- for (int i=1; i<6; i++) {
- UIImage *image=[UIImage imageNamed:[NSString stringWithFormat:@"%d",i]];
- [self.imageArray addObject:image];
- }
- self.firstImage=[[UIImageView alloc]init];
- self.secondImage=[[UIImageView alloc]init];
- self.thirdImage=[[UIImageView alloc]init];
- //当前页码
- self.currentPage=0;
- [self reloadImage];
- }
- -(void)reloadImage
- {
- //第一种情况 , 第一页
- if (self.currentPage==0) {
- self.firstImage.image=[self.imageArray lastObject];
- self.secondImage.image = [self.imageArray objectAtIndex:self.currentPage];
- self.thirdImage.image = [self.imageArray objectAtIndex:self.currentPage + 1];
- }
- // 第二种情况 最后一页
- else if (self.currentPage == self.imageArray.count - 1) {
- self.firstImage.image = [self.imageArray objectAtIndex:self.currentPage - 1];
- self.secondImage.image = [self.imageArray objectAtIndex:self.currentPage];
- self.thirdImage.image = [self.imageArray objectAtIndex:0];
- }
- // 第三种情况 中间页
- else {
- self.firstImage.image = [self.imageArray objectAtIndex:self.currentPage - 1];
- self.secondImage.image = [self.imageArray objectAtIndex:self.currentPage];
- self.thirdImage.image = [self.imageArray objectAtIndex:self.currentPage + 1];
- }
- self.firstImage.frame = CGRectMake(0, 0, WIDTH, HEIGHT);
- self.secondImage.frame = CGRectMake(WIDTH, 0, WIDTH, HEIGHT);
- self.thirdImage.frame = CGRectMake(WIDTH* 2, 0, WIDTH, HEIGHT);
- [self.scrollview addSubview:self.firstImage];
- [self.scrollview addSubview:self.secondImage];
- [self.scrollview addSubview:self.thirdImage];
- self.scrollview.contentOffset = CGPointMake(WIDTH, 0);
- }
- -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
- {
- float x= self.scrollview.contentOffset.x;
- //向左
- if (x<0||x==0) {
- if (self.currentPage==0) {
- self.currentPage=(int)self.imageArray.count-1;
- }
- else{
- self.currentPage--;
- }
- }
- //向右
- if (x > WIDTH * 2 || x == WIDTH * 2) {
- if (self.currentPage == (int)self.imageArray.count - 1) {
- self.currentPage = 0;
- }
- else {
- self.currentPage++ ;
- }
- }
- self.pagecontrol.currentPage = self.currentPage;
- [self reloadImage];
- }
- - (void)didReceiveMemoryWarning {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- @end
UIscrollView和UIPageControl的循环滚动的更多相关文章
- 使用UIScrollView 结合 UIImageView 实现图片循环滚动
场景: 在开发工作中,有时我们需要实现一组图片循环滚动的情况.当我们使用 UIScrollView 结合 UIImageView 来实现时,一般 UIImageView 会尽量考虑重用,下面例子是以( ...
- UIScrollView实现自动循环滚动广告
实现效果如下: 功能说明: 程序运行,图片自动循环播放,采用定时器实现; 当用户用手势触摸滑动时,定时器的自动播放取消,停止触摸时,自动无限播放; 代码如下 : 采用封装视图,外部进行调用即可: 1. ...
- UIScrollView循环滚动1
现在基本每一个商业APP都会有循环滚动视图,放一些轮播广告之类的,都是放在UIScrollView之上.假如我要实现N张图片的轮播,我借鉴了几个博文,得到两种方法实现: [第一种]:如下图(图片来源于 ...
- UIScrollView 循环滚动,代码超简单
如今非常多应用里面多多少少都用到了循环滚动,要么是图片.要么是view,或者是其它,我总结一下,写了个demo分享给大家. 先看代码之后在讲原理: 1.创建一个空的项目(这个我就不多说了). 2.加入 ...
- IOS实现自动循环滚动广告--ScrollView的优化和封装
一.问题分析 在许多App中,我们都会见到循环滚动的视图,比如广告,其实想实现这个功能并不难,用ScrollView就可以轻松完成,但是在制作的过程中还存在几个小问题,如果能够正确的处理好这些小问题, ...
- UI:UIScrollView、UIPageControl
一.UIScrollView的常⽤用属性 二.UIScrollView的常⽤用代理方法 三.UIPageControl的使⽤用 四.UIPageControl与UIScrollView的结合使⽤用 U ...
- UIScrollView和UIPageControl学习使用
# UIScrollView和UIPageControl # 概要 对于同一个页面需要展示很多图片信息.子视图等的这样的需求,我们可以采用控件UIScrollVIew,与之常常一起使用的控件是UIPa ...
- UIScrollView 和 UIPageControl
UIScrollView [滚动视图]非常重要 UIScrollView是滚动视图,是其它带有滚动功能视图的父类, 本身不显示或者只显示背景,主要负责子视图的滚动和翻页. 一.常用属性 1.基本方法 ...
- NGUI实现的一套不同大小 Item 的循环滚动代码
测试: 数据 & Item 的 Ctrl : using UnityEngine; public class ScrollViewItemData { public int index; p ...
随机推荐
- Auto Mapper02《demo》
学习这些基本上网上都有一些教程或者别人做的demo,我是按照这个方式去学习的.先做个demo,学会如何去使用它,接着去慢慢的了解它是如何的运行的,理解里面的一些基本的基础知识.我们不可以再像 ...
- 【WebService】WebService的创建和使用——文件名称生成器
简介 之前做过一个文件名称生成器,通过Webservice读取XML文件并将其通过Json传到客户端中的combobx,用户通过combobox选择要生成文件的名称模板,点击生成则会产生一个文件名称并 ...
- 【FTP】C# System.Net.FtpClient库连接ftp服务器(下载文件)
如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ...
- DataGridView修改HeaderText
dataGridView_htList为一个 DataGridView(ht为HoverTree的缩写)方法一:dataGridView_htList.Columns["HtAddTime& ...
- C# AD(Active Directory)域信息同步,组织单位、用户等信息查询
示例准备 打开上一篇文章配置好的AD域控制器 开始菜单-->管理工具-->Active Directory 用户和计算机 新建组织单位和用户 新建层次关系如下: 知识了解 我们要用C# ...
- C#读取XML文件的基类实现
刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node ...
- Linux环境下安装Tigase XMPP Server
Tigase是一种XMPP服务器,可以作为采用XMPP协议的各种IM(Instant Messeging)工具(如Pandion.Spark等)的服务器. 在Linux环境下安装Tigase的步骤如下 ...
- Eclipse的SVN插件下载
Links for 1.8.x Release:Eclipse update site URL: http://subclipse.tigris.org/update_1.8.xsvn插件包下载: h ...
- 高级Java研发工程师面试题总结
目录 一.Java基础 二.JVM虚拟机基础 三.开源框架基础 四.分布式基础 五.设计模式基础 六.数据库基础 七.网络基础 八.数据结构和算法基础 九.Linux基础 十.其他技术基础 一.JAV ...
- No.018:4Sum
问题: Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = ...