要引用UIScrollView 首先要遵循UIScrollViewDelegate协议

然后重写

//1.拖拽方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView;
//2.即将开始拖拽的方法
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
//3.拖拽完毕的方法
-(void)scrollViewDidEndDragging:(UIScrolView *) scrollView willDecelerate:(BOOL)decelerate

下面是一个带轮询展示界面的小案例

#import "ViewController.h"

@interface ViewController () <UIScrollViewDelegate>
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl; // 创建一个用来引用计时器对象的属性
@property (nonatomic, strong) NSTimer *timer; @end @implementation ViewController // 实现UIScrollView的滚动方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{ // 如何计算当前滚动到了第几页?
// 1. 获取滚动的x方向的偏移值
CGFloat offsetX = scrollView.contentOffset.x;
// 用已经偏移了得值, 加上半页的宽度
offsetX = offsetX + (scrollView.frame.size.width * 0.5); // 2. 用x方向的偏移的值除以一张图片的宽度(每一页的宽度),取商就是当前滚动到了第几页(索引)
int page = offsetX / scrollView.frame.size.width; // 3. 将页码设置给UIPageControl
self.pageControl.currentPage = page; //NSLog(@"滚了,要在这里根据当前的滚动来计算当前是第几页。");
} // 实现即将开始拖拽的方法
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// 停止计时器
// 调用invalidate一旦停止计时器, 那么这个计时器就不可再重用了。下次必须重新创建一个新的计时器对象。
[self.timer invalidate]; // 因为当调用完毕invalidate方法以后, 这个计时器对象就已经废了,无法重用了。所以可以直接将self.timer设置为nil
self.timer = nil;
} // 实现拖拽完毕的方法
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{ // 重新启动一个计时器
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(scrollImage) userInfo:nil repeats:YES]; // 再次修改一下新创建的timer的优先级
// 修改self.timer的优先级与控件一样
// 获取当前的消息循环对象
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
// 改变self.timer对象的优先级
[runLoop addTimer:self.timer forMode:NSRunLoopCommonModes];
} - (void)viewDidLoad {
[super viewDidLoad];
// 动态创建UIImageView添加到UIScrollView中 CGFloat imgW = ;
CGFloat imgH = ;
CGFloat imgY = ; // 1. 循环创建5个UIImageView添加到ScrollView中
for (int i = ; i < ; i++) {
// 创建一个UIImageView
UIImageView *imgView = [[UIImageView alloc] init]; // 设置UIImageView中的图片
NSString *imgName = [NSString stringWithFormat:@"img_%02d", i + ];
imgView.image = [UIImage imageNamed:imgName]; // 计算每个UIImageView在UIScrollView中的x坐标值
CGFloat imgX = i * imgW;
// 设置imgView的frame
imgView.frame = CGRectMake(imgX, imgY, imgW, imgH); // 把imgView添加到UIScrollView中
[self.scrollView addSubview:imgView];
} // 设置UIScrollView的contentSize(内容的实际大小)
CGFloat maxW = self.scrollView.frame.size.width * ;
self.scrollView.contentSize = CGSizeMake(maxW, ); // 实现UIScrollView的分页效果
// 当设置允许分页以后, UIScrollView会按照自身的宽度作为一页来进行分页。
self.scrollView.pagingEnabled = YES; // 隐藏水平滚动指示器
self.scrollView.showsHorizontalScrollIndicator = NO; // 指定UIPageControl的总页数
self.pageControl.numberOfPages = ; // 指定默认是第0页
self.pageControl.currentPage = ; // 创建一个"计时器"控件NSTimer控件
// 通过scheduledTimerWithInterval这个方法创建的计时器控件, 创建好以后自动启动
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(scrollImage) userInfo:nil repeats:YES]; // 修改self.timer的优先级与控件一样
// 获取当前的消息循环对象
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
// 改变self.timer对象的优先级
[runLoop addTimer:self.timer forMode:NSRunLoopCommonModes]; // [self.scrollView bringSubviewToFront:self.pageControl]; } // 自动滚动图片的方法
// 因为在创建计时器的时候, 指定了时间间隔是1.0秒,所以下面这个方法每隔一秒钟执行一次
- (void)scrollImage
{
// 每次执行这个方法的时候, 都要让图片滚动到下一页
// 如何让UIScrollView滚动到下一页?
// 1. 获取当前的UIPageControl的页码
NSInteger page = self.pageControl.currentPage; // 2. 判断页码是否到了最后一页, 如果到了最后一页, 那么设置页码为0(回到第一页)。如果没有到达最后一页, 则让页码+1
if (page == self.pageControl.numberOfPages - ) {
// 表示已经到达最后一页了
page = ; // 回到第一页
} else {
page++;
}
// 3. 用每页的宽度 * (页码 + 1) == 计算除了下一页的contentOffset.x
CGFloat offsetX = page * self.scrollView.frame.size.width; // 4. 设置UIScrollView的contentOffset等于新的偏移的值
[self.scrollView setContentOffset:CGPointMake(offsetX, ) animated:YES]; // 如果图片现在已经滚动到最后一页了, 那么就滚动到第一页 } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end

IOS中的UIScrollView的更多相关文章

  1. IOS中UIScrollView的contentSize、contentOffset和contentInset属性

    IOS中,UIScrollView是可以滚动的视图,其中最常用的UITableView就是继承了UIScrollView. 跟所有的view一样,UIScrollView有一个frame属 性,同时, ...

  2. IOS中UIScrollView的详细使用

    UIScrollView 是可以滚动的View 要想让UIScrollView可以滚动,必须设置UIScrollView的contentSize contentSize : 表示UIScrollVie ...

  3. iOS开发——高级篇——iOS中常见的设计模式(MVC/单例/委托/观察者)

    关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. ...

  4. iOS开发之 UIScrollView的frame、contentSize、contentOffset和contentInset属性

    ios中下拉图片变大效果 http://blog.csdn.net/mad2man/article/details/14169197 IOS中UIScrollView的frame.contentSiz ...

  5. ios 中的小技巧 - 总有你想要的 一

    UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHea ...

  6. 在iOS中获取UIView的所有层级结构 相关

    在iOS中获取UIView的所有层级结构 应用场景 在实际 iOS 开发中,很多时候都需要知道某个 UI 控件中包含哪些子控件,并且分清楚它们的层级结构和自个的 frame 以及 bounds ,以便 ...

  7. iOS开发基础-UIScrollView实现图片缩放

    当用户在 UIScrollView 上使用捏合手势时, UIScrollView 会给 UIScrollViewDelegate 协议发送一条消息,并调用代理的 viewForZoomingInScr ...

  8. IOS中手势UIGestureRecognizer

    通常在对视图进行缩放移动等操作的时候我们可以用UIScrollView,因为它里边自带了这些功能,我们要做的就是告诉UIScrollView的几个相关参数就可以了 但是没有实现旋转的手势即UIRota ...

  9. iOS中常见的设计模式(MVC/单例/委托/观察者)

    关于设计模式这个问题,在网上也找过一些资料,下面是我自己总结的,分享给大家 如果你刚接触设计模式,我们有好消息告诉你!首先,多亏了Cocoa的构建方式,你已经使用了许多的设计模式以及被鼓励的最佳实践. ...

随机推荐

  1. 关于Tarjan(2)

    Tarjan有第二个神奇的用法,求强连通分量!!!!!!!!!!!!!!!!!!! 同样利用了dfn:dfs序,low:能回到的最早祖先的dfn: 废话少说 上板子 #include<iostr ...

  2. JS停止事件冒泡

    ..停止事件冒泡 JavaScript代码 //如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ) //因此它支持W3C的stopP ...

  3. Java中static的特点

    前两天面试时被问到静态的特点,当时回答地不是很好,现在来总结一下 在了解某样东西的时候我们通常会从它是什么,为什么,和怎么样在三方面来衡量,对于java中的static,我们也这样讨论下,要明确以下几 ...

  4. 强大的版本管理工具 Git

    Git 简介 git 是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.是 linux 创始人 Linus Torvalds 为了帮助管理 linux 内核开发而开发的一个开 ...

  5. mac下重启apach

    打开终端 重启apache:sudo /usr/sbin/apachectl restart 关闭apache:sudo /usr/sbin/apachectl stop 开启apache:sudo ...

  6. 如何用Android Studio查看build.gradle源码

    上一篇博客里讲过 build.gradle 里的每一行代码基本都是在调用一个方法,既然是这样,我们就可以用 android studio(下面简称as) 去查看它源码的方法注释说明,这样就可以理解每个 ...

  7. 老李分享:性能测试你不应该只知道loadrunner(1)

    老李分享:性能测试你不应该只知道loadrunner(1)   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest测试 ...

  8. 手机自动化测试:Appium源码分析之跟踪代码分析七

    手机自动化测试:Appium源码分析之跟踪代码分析七   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.poptest推出手机自 ...

  9. java开发中经典的三大框架SSH

    首先我们要明白什么是框架为什么用?相信一开始学习编程的时候都会听到什么.什么框架之类的:首先框架是一个软件半成品,都会预先实现一些通用功能,使用框架直接应用这些通用功能而不用重新实现,所以大多数企业都 ...

  10. sublime前端开发工具常用技巧

    ctrl+N//新建文件夹ctrl+shift+p//打开命令行!,ctrl+E//快速生成html模板ctrl+E//自动补齐ctrl+P(#@)//goto 任何地方,其中#查找元素,@查找样式c ...