UI基础--使用UIScrollView、UIPageControl、NSTimer实现图片循环播放

实现思路:

1、创建一个UIScrollView,这里设置为宽度300,高度130,通过storyboard创建;

2、使用代码在UIScrollView中添加ImageView,横向放入多张ImageView;

3、设置UIScrollView的contentSize为所有图片的宽度总和;

4、要保证UIScrollView的宽度等于一张ImageView的宽度,才能正确分页;

5、添加UIPageControl控件,设置当前页数和总页数;

6、添加NSTimer实现自动循环;

UIPageControl:

是iOS开发中的一个分页控件,一些常用属性如下:

 1 // 总页数,默认为0
 2 @property(nonatomic) NSInteger numberOfPages;
 3 // 当前页码
 4 @property(nonatomic) NSInteger currentPage;
 5 // 只有一页的时候隐藏页码,默认为NO
 6 @property(nonatomic) BOOL hidesForSinglePage;
 7 // 其他页码指示颜色
 8 @property(nonatomic,retain) UIColor *pageIndicatorTintColor;
 9 // 当前页码指示颜色
10 @property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;

NSTimer:

定时器,启动定时器的两个方法:

1 //1
2 //timerWithTimeInterval需要手工把timer加入到消息循环中
3 NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector: @selector(xxx) userInfo:nil repeats:YES];
4 NSRunLoop *loop = [NSRunLoop currentRunLoop];
5 [loop addTimer:timer forMode:NSDefaultRunLoopMode]; //这个方法仅仅是提前执行timer要执行的方法
6 //[timer fire];
7 //2
8 //scheduledTimerWithTimeInterval自动把timer加入到消息循环中
9 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];

具体实现的代码:

  1 //
  2 //  ViewController.m
  3 //
  4 //
  5 //  Created by xiaomoge on 14/12/31.
  6 //  Copyright (c) 2014年 xiaomoge All rights reserved.
  7 //
  8
  9 #import "ViewController.h"
 10
 11 @interface ViewController () <UIScrollViewDelegate>
 12 @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;//需要和storyboard连线
 13 @property (weak, nonatomic) IBOutlet UIPageControl *pageControl;//需要和storyboard连线
 14 @property (nonatomic, strong) NSTimer *timer;//定时器
 15 @end
 16
 17 @implementation ViewController
 18
 19 - (void)viewDidLoad {
 20     [super viewDidLoad];
 21     int count = 5;
 22      CGSize size = self.scrollView.frame.size;
 23     //1 动态生成5个imageView
 24     for (int i = 0; i < count; i++) {
 25         UIImageView *iconView = [[UIImageView alloc] init];
 26         [self.scrollView addSubview:iconView];
 27
 28         NSString *imgName = [NSString stringWithFormat:@"img_%02d",i+1];
 29         iconView.image = [UIImage imageNamed:imgName];
 30
 31         CGFloat x = i * size.width;
 32         //frame
 33         iconView.frame = CGRectMake(x, 0, size.width, size.height);
 34     }
 35
 36     //2 设置滚动范围
 37     self.scrollView.contentSize = CGSizeMake(count * size.width, 0);
 38    //隐藏滚动条
 39     self.scrollView.showsHorizontalScrollIndicator = NO;
 40     //3 设置分页
 41     self.scrollView.pagingEnabled = YES;
 42     //4 设置pageControl的页数
 43     self.pageControl.numberOfPages = count;
 44     //5 设置scrollView的代理
 45     self.scrollView.delegate = self;
 46     //6 定时器
 47     [self addTimerO];
 48 }
 49 /*
 50 添加定时器的方法
 51 */
 52 - (void)addTimerO
 53 {
 54     NSTimer *timer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
 55     self.timer = timer;
 56     //消息循环
 57     NSRunLoop *runloop = [NSRunLoop currentRunLoop];
 58     [runloop addTimer:timer forMode:NSRunLoopCommonModes];
 59 }
 60 /*
 61 循环下一张图片
 62 */
 63 - (void)nextImage
 64 {
 65     //取得当前页码
 66     NSInteger page = self.pageControl.currentPage;
 67    //判断当前页码,如果是循环到最后一张后,设置当前页数为第一张
 68     if (page == self.pageControl.numberOfPages - 1) {
 69         page = 0;
 70     }else{//否则继续++
 71         page++;
 72     }
 73    //添加一个动画效果,让图片偏移不致于很突兀
 74     CGFloat offsetX = page * self.scrollView.frame.size.width;
 75     [UIView animateWithDuration:1.0 animations:^{
 76         self.scrollView.contentOffset = CGPointMake(offsetX, 0);
 77     }];
 78 }
 79
 80 #pragma mark - scrollView的代理方法
 81 //正在滚动的时候
 82 - (void)scrollViewDidScroll:(UIScrollView *)scrollView
 83 {
 84     //如果图片转了一半以上,那么就把页数+1
 85     int page = (scrollView.contentOffset.x + scrollView.frame.size.width / 2)/ scrollView.frame.size.width;
 86     //把page赋给当前页
 87     self.pageControl.currentPage = page;
 88 }
 89 //开始滚动的时候,把定时器给停止了,否则当滚动停止时,仍然会执行滚动时所需要转动的页数的。
 90 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
 91 {
 92     //停止定时器
 93     [self.timer invalidate];
 94 }
 95 //当停止滚动的时候,开启定时器,重新进入自动循环
 96 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
 97 {
 98     [self addTimerO];
 99 //    self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
100 }
101 @end
时间: 2024-10-10 20:29:11

UI基础--使用UIScrollView、UIPageControl、NSTimer实现图片循环播放的相关文章

学习IOS开发UI篇--UI知识点总结(三) UIScrollView/UIPageControl/NSTimer

UIScrollView:常用属性 @property(nonatomic)   UIEdgeInsets     contentInset;               // default UIEdgeInsetsZero. add additional scroll area around content @property(nonatomic,getter=isPagingEnabled) BOOL   pagingEnabled;     // default NO. if YES,

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

场景: 在开发工作中,有时我们需要实现一组图片循环滚动的情况.当我们使用 UIScrollView 结合 UIImageView 来实现时,一般 UIImageView 会尽量考虑重用,下面例子是以(左中右)三个 UIImageView 的使用,其实也可以考虑使用 两个 UIImageView 实现的情况.这样避免 一组图片多少个就对应多少个 UIImageView 所导致占用过多内存的情况. 效果如下: ViewController.h 1 #import <UIKit/UIKit.h> 2

【学习ios之路:UI系列】实现轮播图效果(UIImageView,UIScrollView,UIPageControl,NSTimer相结合)

实现效果,在不点击的情况下,自定滚动,点击时,停止.如下图 部分代码如下: //调用NSTimer方法,自定计时 - (void)autoScroll { self.timer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self  selector:@selector(scrollToRight) userInfo:nil repeats:YES]; } //实现触发方法 - (void)scrollToRight { [UIVie

UI基础之UIScrollView的使用

一:ScrollView属性应用 1,UIScrollView是一个能够滚动的视图控件,可以?用来展?示?大量的内容,并且可以通过滚 动查看所有的内容 2,UIScrollView 的使用步骤: 1>添加scrollView的滚动内容 2>设置scrollView的滚动范围,属性值contentSize,告诉scrollView滚动内容的范围. 3,属性: 1>contentOffset; 这个属性?用来表?示UIScrollView滚动的位置 2>contentSize;这个属性

IOS开发UI基础之UIScrollView

什么是UIScrollView ● 移动设备的屏幕?大?小是极其有限的,因此直接展?示在?用户眼前的内容也相当有限 ● 当展?示的内容较多,超出?一个屏幕时,?用户可通过滚动?手势来查看屏幕以外的内容 ● 普通的UIView不具备滚动功能,不适合显?示过多的内容 ● UIScrollView是?一个能够滚动的视图控件,可以?用来展?示?大量的内容,并且可以通过滚 动查看所有的内容 UIScrollView的基本使? ● UIScrollView的?用法很简单 ? 将需要展?示的内容添加到UISc

UI基础视图----UIScrollView总结

UIScrollView是UIKit框架下的很重要的视图类,是UIView的子类.UILabel,UIImageView,UIWebView分别用于展示文字,图片,网页,UILabel通过属性text来展示文字,UIImageView通过属性image来展示图片,UIWebView通过loadRequest:来展示网页(当然展示方法不止这些),UIScrollView虽然是这些视图类的兄弟类,但是并没有这些属性或者方法.但是根据UIView的层级关系,UIScrollView可以用来展示其他视图

图片循环播放

使用 pageSwitch插件  多种效果 引入  jquery.js 和 pageSwitch.min.js <script src="js/jquery-1.11.0.min.js"></script> <script src="dist/pageSwitch.min.js"></script> 在页面定义标签 <div id="container"> <div class=&

php广告图片循环播放 幻灯片效果

<!DOCTYPE> <html> <head> <meta http-equiv="content-type" content="text/html" charset="utf-8"> <title>Image play</title> <style> body{ width:430px; margin:20px auto; } p.now{ display:b

【转】 iOS开发UI篇—UIScrollView控件实现图片轮播

原文:http://www.cnblogs.com/wendingding/p/3763527.html iOS开发UI篇—UIScrollView控件实现图片轮播 一.实现效果 实现图片的自动轮播            二.实现代码 storyboard中布局 代码: 1 #import "YYViewController.h" 2 3 @interface YYViewController () <UIScrollViewDelegate> 4 @property (w