因为昨天在网上找了很久,很多只能实现向右滚动,而且一张图一个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的循环滚动的更多相关文章

  1. 使用UIScrollView 结合 UIImageView 实现图片循环滚动

    场景: 在开发工作中,有时我们需要实现一组图片循环滚动的情况.当我们使用 UIScrollView 结合 UIImageView 来实现时,一般 UIImageView 会尽量考虑重用,下面例子是以( ...

  2. UIScrollView实现自动循环滚动广告

    实现效果如下: 功能说明: 程序运行,图片自动循环播放,采用定时器实现; 当用户用手势触摸滑动时,定时器的自动播放取消,停止触摸时,自动无限播放; 代码如下 : 采用封装视图,外部进行调用即可: 1. ...

  3. UIScrollView循环滚动1

    现在基本每一个商业APP都会有循环滚动视图,放一些轮播广告之类的,都是放在UIScrollView之上.假如我要实现N张图片的轮播,我借鉴了几个博文,得到两种方法实现: [第一种]:如下图(图片来源于 ...

  4. UIScrollView 循环滚动,代码超简单

    如今非常多应用里面多多少少都用到了循环滚动,要么是图片.要么是view,或者是其它,我总结一下,写了个demo分享给大家. 先看代码之后在讲原理: 1.创建一个空的项目(这个我就不多说了). 2.加入 ...

  5. IOS实现自动循环滚动广告--ScrollView的优化和封装

    一.问题分析 在许多App中,我们都会见到循环滚动的视图,比如广告,其实想实现这个功能并不难,用ScrollView就可以轻松完成,但是在制作的过程中还存在几个小问题,如果能够正确的处理好这些小问题, ...

  6. UI:UIScrollView、UIPageControl

    一.UIScrollView的常⽤用属性 二.UIScrollView的常⽤用代理方法 三.UIPageControl的使⽤用 四.UIPageControl与UIScrollView的结合使⽤用 U ...

  7. UIScrollView和UIPageControl学习使用

    # UIScrollView和UIPageControl # 概要 对于同一个页面需要展示很多图片信息.子视图等的这样的需求,我们可以采用控件UIScrollVIew,与之常常一起使用的控件是UIPa ...

  8. UIScrollView 和 UIPageControl

    UIScrollView [滚动视图]非常重要 UIScrollView是滚动视图,是其它带有滚动功能视图的父类, 本身不显示或者只显示背景,主要负责子视图的滚动和翻页. 一.常用属性 1.基本方法 ...

  9. NGUI实现的一套不同大小 Item 的循环滚动代码

    测试: 数据 & Item  的 Ctrl : using UnityEngine; public class ScrollViewItemData { public int index; p ...

随机推荐

  1. 【读书笔记】--SQL基础概念复习

    主键:每个表,只能有一个主键,主键不能为NULL,且必须是唯一的.主键最好是由单个列组成,但这不是必须的,主键也可以是由多个列组成,如果表的两个列组合在一起能唯一标识一个行,而单个列不能,则可以将这两 ...

  2. SQL--局部变量

    取值的话:print @变量名, 变量不设置值的话,默认打印出来是:NULL, 输出变量的值:

  3. 钉钉开发中post异步调用问题

    最近项目上在做钉钉开发中,经常会遇到使用post方式调用钉钉内部的方法(微信也有一样),这里涉及到跨域的post调用,但跨域一般都是用jsonp格式,而这个格式只支持get方式.尝试了挺多方法都没有返 ...

  4. C# CGI程序

    一.控制面板—>程序和功能—>打开或关闭Windows功能 把相关的功能勾上,点“确定” 二.新建一个网站,配置ISAPI和CGI限制.处理程序映射 三.CGI控制台应用程序代码: usi ...

  5. 【C#】添加引用方式抛出和捕获干净的WebService异常

    说明:[干净]指的是客户端在捕获WebService(下称WS)抛出的异常时,得到的ex.Message就是WS方法中抛出的异常消息,不含任何“杂质”. 前提:你对WS有编写权.就是说如果你调的是别人 ...

  6. hibernate----1-1

    <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...

  7. 最新微信公众平台js sdk整合PHP版

    由于没有持续关注微信公众平台相关的开发,所以看到这个东西时,都没有耐心看完开发文档,或者不知道重点. 重点在哪呢?重点在示例代码:http://mp.weixin.qq.com/wiki/7/aaa1 ...

  8. lua编译出so文件

    把lua编译出so文件 http://superuser.com/questions/557884/getting-error-recompile-with-fpic http://guiquanz. ...

  9. 图-最短路径-Dijktra(迪杰斯特拉)算法

    1. 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉算法于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始 ...

  10. Nginx详解-服务器集群

    Nginx是什么 代理服务器:一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端.应用比如:GoAgent,FQ神器.  一个完整的代理请求过程为:客户端首先 ...