#import ViewController.h
#define ImageViewCount 5
 
@interface ViewController ()<uiscrollviewdelegate>
 
@property (weak, nonatomic) IBOutlet UIScrollView *imageScrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *imageViewPageControl;
@property (strong, nonatomic) NSTimer *timer;
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
   
    [self addImageView2ScrollView];
    self.imageScrollView.contentSize = CGSizeMake(self.imageScrollView.frame.size.width * ImageViewCount, 0);
 
    self.imageScrollView.delegate = self;
    self.imageScrollView.pagingEnabled = YES;//UIScrollView支持拖动分页
    self.imageViewPageControl.numberOfPages  = ImageViewCount;
     
    [self addScrollTimer];
}
 
- (void)rotatePic{
    int currentPageIndex = self.imageViewPageControl.currentPage;
    if(++currentPageIndex == 5){
        currentPageIndex = 0;
    }
    CGFloat offsetX = currentPageIndex * self.imageScrollView.frame.size.width;
    [UIView animateWithDuration:1 animations:^{
        self.imageScrollView.contentOffset = CGPointMake(offsetX, 0);
    }];
}
 
/**添加图片到imageScrollView*/
- (void)addImageView2ScrollView{
    CGFloat imageWidth = self.imageScrollView.frame.size.width;
    CGFloat imageHeight = self.imageScrollView.frame.size.height;
    for(int i = 0;i <= ImageViewCount;i++){
        UIImageView *imageInScroll = [[UIImageView alloc] init];
        imageInScroll.frame = CGRectMake(i * imageWidth, 0, imageWidth, imageHeight);
        imageInScroll.image = [UIImage imageNamed:[NSString stringWithFormat:@img_%02d,i + 1]];
        [self.imageScrollView addSubview:imageInScroll];
    }
}
 
// 正滚动时执行
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    CGFloat offX = self.imageScrollView.contentOffset.x;//(0,0)距离content内部左上顶点的x轴长度
    NSLog(@~~~~~~~%f ^^^^^^%f, offX, self.imageScrollView.frame.size.width);
    int currentPageIndex = (offX + .5f * self.imageScrollView.frame.size.width) / self.imageScrollView.frame.size.width;
    self.imageViewPageControl.currentPage = currentPageIndex;
}
 
- (void)addScrollTimer{
    self.timer = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(rotatePic) userInfo:nil repeats:YES];
    [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
}
 
- (void)removeScrollTimer{
    [self.timer invalidate];//释放定时器
    self.timer = nil;
}
 
// 开始准备滚动时执行 移除定时滚动操作
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    NSLog(@~~~scrollViewWillBeginDragging);
    [self removeScrollTimer];
}www.2cto.com
 
// 结束滚动后执行 添加定时滚动操作
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    NSLog(@~~~scrollViewDidEndDragging);
    [self addScrollTimer];
}
@end
</uiscrollviewdelegate>

对UIScrollView的运用,以上代码中有详细注释,需注意2点:

1.注意设置contentSize属性。其中contentSize表示scroll内容尺寸大小

2.注意设置代理UIScrollViewDelegate,才可调用其中的方法

对于定时器NSTimer的运用需注意

1.在线程的loop中添加定时器

2.注意使用完成回收NSTimer

结伴旅游,一个免费的交友网站:www.jieberu.com

推推族,免费得门票,游景区:www.tuituizu.com

iOS开发之实现图片自动切换(类似android画廊效果)的更多相关文章

  1. iOS开发——高级篇——图片轮播及其无限循环效果

    平时APP中的广告位.或者滚动的新闻图片等用到的就是图片轮播这种效果,实现方式主要有两种,一种是ScrollView+ImageView,另一种则是通过CollectionView,今天总结的是Scr ...

  2. iOS开发:使用Tab Bar切换视图

    iOS开发:使用Tab Bar切换视图 上一篇文章提到了多视图程序中各个视图之间的切换,用的Tool Bar,说白了还是根据触发事件使用代码改变Root View Controller中的Conten ...

  3. 原生js+css3实现图片自动切换,图片轮播

    运用CSS3transition及opacity属性 制作图片轮播动画 自己这两天根据用js来控制触发CSS3中transition属性,从而写出来的以CSS3动画为基础,js控制过程的图片轮播 运用 ...

  4. js实现图片自动切换效果。

    js实现图片自动切换效果,简单实用,原谅我只是一只小菜鸟还在学大神天天写博文装逼. <script language="javascript"> setInterval ...

  5. IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例

    IOS开发中UIBarButtonItem上按钮切换或隐藏案例实现案例是本文要介绍的内容,这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add bu ...

  6. jquery 图片自动切换

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. tab切换效果 网站中的图片自动切换

    网站中的图片自动切换 今天上一套tab切换效果的代码 动图就自己实现吧! 下面贴HTML代码,大体分两部分,图片div和按钮div,代码很容易看懂~ <!DOCTYPE html> < ...

  8. iOS开发-iPad侧边栏Tab选项卡切换

    Android中习惯了叫侧边栏,iOS中如果不习惯侧边栏称呼的话可以叫dock,侧边栏的切换,类似于Android中的底部导航栏的切换,iPad尺寸大了一些,导航的栏目放在侧边会显示的更好耐看一些.选 ...

  9. iOS开发之虾米音乐频道选择切换效果分析与实现

    今天博客的内容比较简单,就是看一下虾米音乐首页中频道选择的一个动画效果的实现.之前用mask写过另外一种Tab切换的一种效果,网易云音乐里边的一种Tab切换效果,详情请移步于"视错觉:从一个 ...

随机推荐

  1. 【spring Boot】spring boot获取资源文件的三种方式【两种情况下】

    首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取 带 ...

  2. Java 反射理解(三)-- Java获取方法信息

    Java 反射理解(三)-- Java获取方法信息 基本的数据类型.void关键字,都存在类类型. 举例如下: public class ClassDemo2 { public static void ...

  3. Oracle数据库中的变量

    Oracle数据库中的变量 来源:https://blog.csdn.net/wahaa591/article/details/46772769 1.define(即host变量) define va ...

  4. vue打开到新页面,并传递参数

    打开新页面,有两种方式, 一种是标签式: <router-link tag="a" target="_blank" :to="{path: '/ ...

  5. ES6入门三:解构

    数组解构 对象解构 声明与解构相关的问题 解构与重复赋值 按需解构 默认值赋值 解构参数 解构(destructuring):结构化赋值 解构通常被看作ES6的一个结构化赋值方法,可以通过解构将数组元 ...

  6. js 操作对象的小技巧

    来源:https://www.w3cplus.com/javascript/javascript-tips.html 1.使用...运算符合并对象或数组中的对象 同样使用ES的...运算符可以替代人工 ...

  7. MYSQL 修改语句(数据)

    修改数据(UPDATE)     如果你失忆了,希望你能想起曾经为了追求梦想的你.     我们玩QQ.微信.淘宝等等,都会有一个操作:修改信息   淘宝常用的嘛,新增了收货地址,也可以修改它,微信/ ...

  8. 第二十五篇 jQuery 学习7 获取并设置 CSS 类

    jQuery 学习7 获取并设置 CSS 类   jQuery动态控制页面,那么什么是动态呢?我们就说一下静态,静态几乎又纯html+css完成,就是刷新页面之后,不会再出现什么变动,一个实打实的静态 ...

  9. OSCP-FristiLeaks

    环境搭建 靶机下载: https://www.vulnhub.com/entry/fristileaks-13,133/ 安装:直接用virtualbox打开 网络桥接 找到靶机IP 虚拟机启动就显示 ...

  10. 数据集:Introduction to Econometrics by Stock&Watson

    James H. Stock and Mark W. Watson, Introduction to Econometrics: data sets 詹姆斯·H·斯托克 马克·W·沃森. 计量经济学. ...