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 ...
随机推荐
- 浏览器桌面通知Notification探究
首先说明,这篇博文不是科普讲解的,而是立flag研究的,是关于浏览器消息自动推送,就是下面这个玩意: 最近常常在浏览器看到这样的消息推送,还有QQ.com的推送,现在我对这个不了解,不知道叫消息自动推 ...
- asp.net mvc5+Echarts3.0+AspNet.SignalR2.0 实时监控cpu占用率推送
先看看效果: 感谢QQ群18668853的群主,无私的公开课,全是干货,当初学的时候,群主用的是jquery.flot做图表,我这里改成百度的Echarts3.0,这算是自己的修改吧,喜欢的可以去下载 ...
- [译]学习IPython进行交互式计算和数据可视化(一)
--学习IPython进行交互式Python编程.高性能数字计算和数据可视化 作者:Cyrille Rossant 译者:Tacey Wong 注:仅为个人翻译及学习,多有谬处,E文尚可的推荐阅读英文 ...
- 使用LinkedList模拟一个堆栈或者队列数据结构
使用LinkedList模拟一个堆栈或者队列数据结构. 堆栈:先进后出 如同一个杯子. 队列:先进先出 如同一个水管. import java.util.LinkedList; public cl ...
- Windows Server 2016
Windows Server 2016 正式版教程:安装.激活.设置 http://www.ithome.com/html/win10/261386.htm 2016-9-29 12:57:58来源: ...
- C#的变迁史 - C# 5.0 之并行编程总结篇
C# 5.0 搭载于.NET 4.5和VS2012之上. 同步操作既简单又方便,我们平时都用它.但是对于某些情况,使用同步代码会严重影响程序的可响应性,通常来说就是影响程序性能.这些情况下,我们通常是 ...
- 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板
[源码下载] 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板 作者:webabcd 介绍不可或缺 Windows Native 之 C++ ...
- Android文件的分割和组装
使用UDP数据包发送文件时,由于UDP数据包大小的限制,一个文件要放在几个UDP数据包里面发送,这就需要把一个文件分割成若干部分,分别放进若干个UDP数据包里面,在接收端,收到这些UDP数据包以后,再 ...
- NoSQL入门概述
入门概述 1 NoSQL是什么? NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关 ...
- linux系统下nodejs安装过程随记
首先下载适合的版本.这里我使用的是node v.10.36 先介绍编译安装的详细过程. 下载该版本: wget http://nodejs.org/dist/v0.10.36/node-v0.10.3 ...