iOS开发UI篇----UI基础之美女轮播器(自动轮播)

  1 #import "ViewController.h"
  2
  3 @interface ViewController () <UIScrollViewDelegate>
  4
  5 @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
  6 @property (weak, nonatomic) IBOutlet UIPageControl *pageControl;
  7
  8 @property (weak,nonatomic) NSTimer *timer;
  9
 10 @end
 11 /**
 12  *  View的代理属性都是weak的,否则就会循环强引用,导致内存泄露
 13  */
 14 @implementation ViewController
 15
 16 //当控制器上得View已被加载完毕就会执行这个方法
 17 - (void)viewDidLoad {
 18     [super viewDidLoad];
 19
 20 // 把美女视图添加到scrollView中
 21
 22 //      取出scrollView的frame
 23     CGRect frame = self.scrollView.frame;
 24 //  定义变量记录多少张图片
 25     int numOfImages = 8;
 26
 27     for (int i = 0; i < numOfImages; ++i) {
 28
 29 //      创建UIImageView
 30         UIImageView *imageView = [[UIImageView alloc] init];
 31 //      添加到scrollView中
 32         [self.scrollView addSubview:imageView];
 33 //      给imageView设置图片
 34 //      拼接图片名称
 35         NSString *imageName = [NSString stringWithFormat:@"%02d",i+1];
 36 //      设置图片
 37         imageView.image = [UIImage imageNamed:imageName];
 38 //      取出scrollView的frame(共用代码移到外边)
 39 //        CGRect frame = self.scrollView.frame;
 40 //      计算imageView的x坐标
 41         frame.origin.x = frame.size.width * i;
 42 //      设置imageViewframe
 43         imageView.frame = frame;
 44
 45     }
 46
 47 // 设置scrollView的contentSize
 48 // 0表示支持垂直方向的滚动
 49     self.scrollView.contentSize = CGSizeMake(frame.size.width * numOfImages, 0);
 50
 51 // 设置支持分页
 52     self.scrollView.pagingEnabled = YES;
 53 // 去掉水平的滚动条
 54     self.scrollView.showsHorizontalScrollIndicator = NO;
 55
 56 // 设置控制为scrollView代理
 57     self.scrollView.delegate = self;
 58
 59 // 开始轮播
 60     [self startTimer];
 61 }
 62
 63
 64 - (void) nextImage
 65 {
 66 // 调试输出的关键字__func__ 等价于 __FUNCTION__
 67 // -[ViewController nextImage]  -表示对象方法  ViewController 是哪个类的 nextImage是哪个方法
 68 //    NSLog(@"%s",__FUNCTION__);
 69
 70 // 1.获取当前页
 71     NSInteger page = self.pageControl.currentPage;
 72 // 2.计算下一页
 73     if (page == self.pageControl.numberOfPages - 1) {
 74         page = 0;
 75     }else{
 76         page++;
 77     }
 78
 79     [UIView animateWithDuration:1 animations:^{
 80
 81         //  3.让scrollView滚到下一页
 82         self.scrollView.contentOffset = CGPointMake(page * self.scrollView.frame.size.width, 0);
 83
 84     }];
 85
 86 }
 87
 88 //开启一个全新的定时器
 89 - (void) startTimer
 90 {
 91     //  定时器
 92     //  scheduled 调度(执行)
 93     //   Interval 间隔的时间 (s)
 94     //  target 目标(调用谁的方法)
 95     //  selector 方法(调用哪一个方法)
 96     //  repeats 是否需要重复执行
 97 //  做了两件事 1.创建NSTimer的对象
 98 //           2。把这个NSTimer以默认形式添加到了主运行循环中 (默认优先级低于事件处理的优先级)
 99 //    self.timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
100
101 // 1.创建NSTimer对象
102     NSTimer *timer  = [NSTimer timerWithTimeInterval:2 target:self selector:@selector(nextImage) userInfo:nil repeats:YES];
103 // 2.添加到主运行循环中
104 //  Run 运行 Loop 循环
105 //  NSDefaultRunLoopMode 默认模式(低于事件处理优先级)
106 //  NSRunLoopCommonModes 通用模式 (于事件处理的优先级相同)
107     [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
108
109 // 3.记录当前的timer
110     self.timer = timer;
111 }
112
113
114 #pragma mark - 代理方法
115 /**
116  *  当用户即将拽住scrollView的时候执行这个
117  */
118 - (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView
119 {
120 //  停止定时器
121 //  让定时器失效,一旦失效就不能在使用了。
122     [self.timer invalidate];
123 }
124 /**
125  *  当用户的手指从scrollViwew上抬起的时候执行这个方法
126  */
127 - (void) scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
128 {
129 //  重新开始调度
130     [self startTimer];
131
132 }
133
134 //当scrollView的contentOffset发生改变都会调用该方法
135 - (void)scrollViewDidScroll:(UIScrollView *)scrollView
136 {
137
138 // round 函数可以进行四舍五入
139    int page = round(scrollView.contentOffset.x / scrollView.frame.size.width) ;
140
141     self.pageControl.currentPage = page;
142 }
143
144 @end
时间: 2024-12-17 15:48:30

iOS开发UI篇----UI基础之美女轮播器(自动轮播)的相关文章

iOS开发UI篇—Button基础

iOS开发UI篇—Button基础 一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状态 normal(普通状态) 默认情况(Default) 对应的枚举常量:UIControlStateNormal highlighted(高亮状态) 按钮被按下去的时候(手指还未松开) 对应的枚举常量:UIControlStateHighlighted disabled(失效状态,不可用状态) 如

学习IOS开发UI篇--UI知识点总结(四) UITabelView/UITableViewCell

UITabelView:常用属性 @property (nonatomic)          CGFloat    rowHeight;             // will return the default value if unset @property (nonatomic)          CGFloat     sectionHeaderHeight;   // will return the default value if unset @property (nonatom

学习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,

学习IOS开发UI篇--UI知识点总结(一) UIButton/UITextField

UIkit框架下的几个基本控件,UIButton,UITextField,UILabel,UIImageView,UIScrollView,UITableView,UITableViewCell,UIPageControl; 他们的继承关系,UILabel,UIImageView,UIScrollView,UITableViewCell,直接继承自UIView; UIButton,UITextField,UIPageControl,继承自UIControl; UIControl继承自UIView

iOS开发网络篇—网络编程基础

iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力 (3)如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水 移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据 新闻:网易新闻.新浪新闻.搜狐新闻.腾讯新闻 视频:优酷.百度视频.搜狐视频.爱奇艺视频 音乐

iOS开发多线程篇—自定义NSOperation

iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewController. 1 // 2 // YYViewController.h 3 // 01-自定义Operation 4 // 5 // Created by apple on 14-6-26. 6 // Copyright (c) 2014年 itcase. All rig

iOS开发多线程篇 11 —自定义NSOperation

iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UITableViewController. 1 // 2 // YYViewController.h 3 // 01-自定义Operation 4 // 5 // Created by apple on 14-6-26. 6 // Copyright (c) 2014年 itcase. All rig

iOS开发多线程篇—多线程简单介绍

iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 3.线程

iOS开发网络篇—NSURLConnection基本使用

iOS开发网络篇—NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.... (3)NSMutableURLRequest:NSURLRequest的子类 (4)NSURLConnection:负责发送请求,建立客户端和服务器的连接.发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据 二.NSUR

iOS开发多线程篇—多线程的的相关概念(1)

iOS开发多线程篇-多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过"活动监视器"可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行