1 //
  2 //  GXViewController.m
  3 //  自动滚动及无线循环
  4 //
  5 //  Created by 郭晓 on 14-3-7.
  6 //  Copyright (c) 2014年 郭晓. All rights reserved.
  7 //
  8
  9 #import "GXViewController.h"
 10
 11 #define kCount 6  //图片总张数
 12
 13 static long step = 0; //记录时钟动画调用次数
 14
 15 @interface GXViewController () <UIScrollViewDelegate>
 16 {
 17     UIScrollView *_scrollView;
 18     UIImageView     *_currentImageView; //当前视图
 19     UIImageView     *_nextImageView;    //下一个视图
 20     UIImageView     *_previousView;     //上一个视图
 21     CADisplayLink   *_timer;            //定时器
 22
 23     BOOL _isDraging; //当前是否正在拖拽
 24 }
 25
 26 @end
 27
 28 @implementation GXViewController
 29
 30 - (void)viewDidLoad
 31 {
 32     [super viewDidLoad];
 33
 34     CGFloat width = self.view.bounds.size.width;
 35     CGFloat height = self.view.bounds.size.height;
 36
 37     _scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
 38     _scrollView.contentSize = CGSizeMake(3 * width, 0);
 39     _scrollView.showsHorizontalScrollIndicator = NO;
 40     _scrollView.pagingEnabled = YES;
 41     _scrollView.delegate = self;
 42     _scrollView.bounces = NO;
 43     _scrollView.contentOffset = CGPointMake(width, 0);
 44     [self.view addSubview:_scrollView];
 45
 46     //初始化当前视图
 47     _currentImageView = [[UIImageView alloc] init];
 48     _currentImageView.image = [UIImage imageNamed:@"01.jpg"];
 49     _currentImageView.frame = CGRectMake(width, 0, width, height);
 50     _currentImageView.contentMode = UIViewContentModeScaleAspectFill;
 51     [_scrollView addSubview:_currentImageView];
 52
 53     //初始化下一个视图
 54     _nextImageView = [[UIImageView alloc] init];
 55     _nextImageView.image = [UIImage imageNamed:@"02.jpg"];
 56     _nextImageView.frame = CGRectMake(width * 2, 0, width, height);
 57     _nextImageView.contentMode = UIViewContentModeScaleAspectFill;
 58     [_scrollView addSubview:_nextImageView];
 59
 60     //初始化上一个视图
 61     _previousView = [[UIImageView alloc] init];
 62     _previousView.image = [UIImage imageNamed:@"06.jpg"];
 63     _previousView.frame = CGRectMake(0, 0, width, height);
 64     _previousView.contentMode = UIViewContentModeScaleAspectFill;
 65     [_scrollView addSubview:_previousView];
 66
 67     // 时钟动画
 68     _timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(update:)];
 69     [_timer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
 70
 71 }
 72
 73 #pragma mark 时钟动画调用方法
 74 - (void)update:(CADisplayLink *)timer
 75 {
 76     step++;
 77
 78     if ((step % 120 != 0) || _isDraging) {
 79         return;
 80     }
 81
 82     CGPoint offset = _scrollView.contentOffset;
 83
 84     offset.x += 320;
 85     if (offset.x > 640) {
 86         offset.x = 320;
 87     }
 88
 89     [_scrollView setContentOffset:offset animated:YES];
 90 }
 91
 92 #pragma mark - 代理方法
 93 #pragma mark 准备开始拖动
 94 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
 95 {
 96     _isDraging = YES;
 97 }
 98
 99 #pragma mark 视图停止滚动
100 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
101 {
102     _isDraging = NO;
103     step = 0;
104 }
105
106 #pragma mark 已经拖动
107 - (void)scrollViewDidScroll:(UIScrollView *)scrollView{
108
109     static int i = 1;//当前展示的是第几张图片
110
111     float offset = scrollView.contentOffset.x;
112     if (_nextImageView.image == nil || _previousView.image == nil) {
113
114         //加载下一个视图
115         NSString *imageName1 = [NSString stringWithFormat:@"0%d.jpg", i == kCount ? 1 : i + 1];
116         _nextImageView.image = [UIImage imageNamed:imageName1];
117
118         //加载上一个视图
119         NSString *imageName2 = [NSString stringWithFormat:@"0%d.jpg", i == 1 ? kCount : i - 1];
120         _previousView.image = [UIImage imageNamed:imageName2];
121     }
122
123     if (offset == 0) {
124         _currentImageView.image = _previousView.image;
125         scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
126         _previousView.image = nil;
127
128         if (i == 1) {
129             i = kCount;
130         }else{
131             i -= 1;
132         }
133
134     }
135
136     if (offset == scrollView.bounds.size.width * 2) {
137         _currentImageView.image = _nextImageView.image;
138         scrollView.contentOffset = CGPointMake(scrollView.bounds.size.width, 0);
139         _nextImageView.image = nil;
140
141         if (i == kCount) {
142             i = 1;
143         }else{
144             i += 1;
145         }
146
147     }
148 }
149
150 @end

iOS-利用UIScrollView实现展示图片的无限滚动及自动滚动 - 郭晓相关推荐

  1. iOS换一种思路写一个无限轮播的滚动视图

    换一种思路写一个无限轮播的滚动视图 写这篇博客已经距离我当时写差不多有一个月时间了,也完善了很多,基本是没有bug的,如果有,不妨留言,喜欢的话,劳烦各位点个赞,不喜欢的,不妨看看思路,提提意见 1. ...

  2. iOS小技能: 利用UIScrollView实现图片放大预览,并支持缩小。

    文章目录 前言 I 利用UIScrollView实现图片放大和缩小 1.1 UIScrollView 的缩放原理 1.2 使用方法 1.3 代码实现 II iOS小技能:查看大图浏览器(图片支持滑动切 ...

  3. iOS 两种不同的图片无限轮播

    代码地址如下: http://www.demodashi.com/demo/11608.html 前记 其实想写这个关于无限轮播的记录已经很久很久了,只是没什么时间,这只是一个借口,正如:时间就像海绵 ...

  4. 使用Axure制作无限循环展示图片效果

    一.实现的效果 如图: 1.此次需要实现的效果是,进入界面后,在图片展示区域的图片根据事先设定好的时间,自动切换不同的图片: 2.循环不间断: 3.页面不出现闪烁的现象. 二.做前工作 图片:4张 软 ...

  5. 分别利用opencv和matplotlib.pyplot来展示图片

    众所周知,opencv是一个图像算法库,理论上讲我们应该使用opencv来展示图片,但本文要告诉你,什么时候我们使用matplotlib.pyplot来画图:需要对图像进行一些操作的时候(如看一下某些 ...

  6. HTML图片重叠变换,CSS实现图片无缝无限循环展示效果

    只是想练练手,看看能不能实现在页面上放置一个能无限循环滚动的图片横幅.事实证明,这并不是很难. 先看实际效果: 无限循环滚动的关键是确定宽图片的位置 首先,这个图片的设计需要有一点技巧,就是它的首位部 ...

  7. Python 图像处理篇-利用opencv库展示本地图片实例演示

    python 常用的图像处理技术有两种方法,一种是 opencv,另一种是 pytesseract. opencv 进行图像处理的话,我们需要安装 opencv-python 和 numpy 这两个库 ...

  8. ios scrollView中增加动画效果,自动滚动UIScrollView,利用了NSTimer

    转载自:http://blog.csdn.net/z343929897/article/details/7974753 按照赵总要求,在首页上边需要加广告条,本来以为挺复杂的,原来挺简单 在类的申明文 ...

  9. iOS开发UIScrollView的底层实现

    起始 做开发也有一段时间了,经历了第一次完成项目的激动,也经历了天天调用系统的API的枯燥,于是就有了探索底层实现的想法. 关于scrollView的思考 在iOS开发中我们会大量用到scrollVi ...

最新文章

  1. 10亿美元续命!OpenAI获微软投资,意在通用人工智能?
  2. 封装php连接数据库返回方法
  3. 图像窗口方面 window
  4. vue中组件在不同页面中渲染出错
  5. input checkbox 选择内容输出多少个
  6. web前端开发初学者十问集锦(1)
  7. 玩转html5(三)---智能表单(form),使排版更加方便
  8. macos怎么装mysql80_Mac下MySQL安装配置教程
  9. Swift 基础 高阶函数 forEach filter map compactMap compactMapValues flatMap reduce sort sorted shuffled ...
  10. Android蓝牙通信
  11. [高数][高昆轮][高等数学上][第一章-函数与极限]10.闭区间上连续函数的性质
  12. 2022 最新 JCR正式发布全球最新影响因子名单(前600名)
  13. Android文本输入框EditText属性和方法说明
  14. OSChina 周六乱弹 —— 女友是啥子哟?生命的最大负载?
  15. keep T 不是 KG等级_宅家锻炼堪比健身房,一对一“私教”,Keep 智能动感单车体验...
  16. 财税SaaS行业格局再变,慧算账为何能受资本“偏爱”?
  17. Vision Transformer 综述
  18. Python Tip挑战
  19. 给自己的应用程序添加系统偏好设置
  20. Linux - Ftp客户端安装、创建Ftp用户和登录

热门文章

  1. iOS 11.2 最新真机测试包(12.05)
  2. warning: #1300-D: XXX inherits implicit virtual 报警
  3. Jquery获取radio的状态
  4. 带你详细了解ADSS光缆
  5. antv g2plot可视化图表在vue中的使用之四:为图表添加事件
  6. com组件 安全提示_CDE 解读化学药品注射剂生产所用的塑料组件系统相容性研究技术指南(试行)...
  7. 做网络营销的心态与步骤
  8. QQ小程序流量主怎么开通的,流量主开通技巧。
  9. 版式设计与画册设计的关系
  10. 【Bugly干货分享】关于 Android N 那些你不知道的事儿