UIScrollView滚动视图控件和UIPageControl分页视图控件:
   UIScrollView用于显示多于一个屏幕的内容,超出屏幕范围的内容可以通过滑动进行查看,当然UIPagecontrol也能实现图片分页查看。
   UIScrollView往往搭配UIPageControl一起使用,当UIScrollView进行滚动查看时,UIPagecontrol对应的分页控制点也会相应的变动,反之亦然。

获取当前分页的页码:

//页码 = (contentoffset.x + scrollView一半宽度)/单个scrollView宽度

//页码 = 滚动视图可以滚动的总宽度/单个滚动视图的宽度)

 
一、UIScrollView常见属性:
@interface UIScrollView : UIView <NSCoding> {

@property(nonatomic) CGPoint contentOffset; // UIScrollView当前滚动的位置

@property(nonatomic) CGSize  contentSize;    // 设置UIScrollView的滚动范围(滚动图大小)

@property(nonatomic) UIEdgeInsets  contentInset; // 这个属性可以在四周增加滚动范围(即增减周边空白部分)

@property(nonatomic,assign) id<UIScrollViewDelegate> delegate; //滚动视图的代理

@property(nonatomic,getter=isDirectionalLockEnabled) BOOL directionalLockEnabled; // 控件是否只在一个方向滚动

@property(nonatomic)  BOOL bounces;  // 是否有弹簧效果

@property(nonatomic)  BOOL    alwaysBounceVertical;  //设置垂直方向的弹簧效果

@property(nonatomic)  BOOL    alwaysBounceHorizontal; // 设置水平方向的弹簧效果

@property(nonatomic,getter=isPagingEnabled) BOOL  pagingEnabled; //控制控件是否整页翻动

@property(nonatomic,getter=isScrollEnabled) BOOL  scrollEnabled;  //是否能滚动

@property(nonatomic)  BOOL    showsHorizontalScrollIndicator; // 是否显示水平方向的滚动条

@property(nonatomic)  BOOL    showsVerticalScrollIndicator;   // 是否显示垂直方向的滚动条

@property(nonatomic)  UIEdgeInsets  scrollIndicatorInsets;  // 设置滚动范围

@property(nonatomic)  UIScrollViewIndicatorStyle   indicatorStyle;  //设置滚动条样式

@property(nonatomic)  CGFloat     decelerationRate ; //设置手指放开后的减速率

@property(nonatomic) CGFloat zoomScale  //放缩比例

@property(nonatomic) BOOL  bouncesZoom   //是否实现所给的弹簧比例

@property(nonatomic) BOOL  scrollsToTop  //是否能够滚动到顶部

}@end

UIScrollView常见方法:

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated; // 以恒定速度为动画设置新的偏移量

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated; //设置由rect定义的区域仅仅是滚动视图内是可见的

- (void)flashScrollIndicators;  //闪一下滚动条,暗示是否有可滚动的内容

二、UIScrollView手势缩放
设置UIScrollView的id<UISCrollViewDelegate> delegate代理对象
设置minimumZoomScale :缩小的最小比例
设置maximumZoomScale :放大的最大比例
让代理对象实现下面的方法,返回需要缩放的视图控件

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

跟缩放相关的常用方法还有

-(void)scrollViewDidZoom:(UIScrollView *)scrollView 正在缩放的时候调用

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale  缩放完毕的时候调用

三、 UIPagecontrol分页效果

设置pagingEnabled=YES即可,UIScrollView会被分割成多个独立页面,用户的滚动体验则变成了页面翻转
一般会配合UIPageControl增强分页效果
 UIPageControl常用属性:
 
NSInteger numberOfPages : 总页数
NSInteger currentPage : 当前的页码
BOOL hidesForSinglePage : 当只有一页的时候,是否要隐藏视图

@property(nonatomic,retain) UIColor *pageIndicatorTintColor;设置控制器页码点得颜色

@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;设置控制器当前所在页码点的颜色

监听UIPageControl的页面改变:

// 添加监听器

[pageControl addTarget:self action:@selector(pageChange:)

forControlEvents:UIControlEventValueChanged];

// 监听方法

- (void)pageChange:(UIPageControl *)pageControl

{

}

四、UIScrollView滚动视图要实现的协议:UIScrollViewDelegate

@protocol UIScrollViewDelegate<NSObject>

@optional

- (void)scrollViewDidScroll:(UIScrollView *)scrollView;//正在执行滚动视图的滚动操作时调用

- (void)scrollViewDidZoom:(UIScrollView *)scrollView ; //正在执行滚动视图的放缩操作时调用

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;//执行滚动视图的拖拽开始时调用

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset ; //执行滚动视图的拖拽结束时调用

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;//执行滚动视图的拖拽结束时调用(是否减速)

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; // 执行滚动视图减速开始时调用

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;  // 执行滚动视图减速结束时调用

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; //滚动视图动画结束时调用

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;//执行滚动视图放缩时返回新的视图

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view ; //滚动视图放缩开始时调用

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale; //滚动视图放缩结束时调用

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;  //滚动视图是否滚动到顶部

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;   //滚动视图滚动到顶部时调用

@end

 
 
代码范例解析:
  一、单张图片案例:
   (1)

//设置imageView,获取图片资源

UIImage *img = [UIImage imageNamed:@"landscape.jpg"];

self.imageview = [[UIImageView alloc]init];

[self.imageview setImage:img];

self.imageview.contentMode = UIViewContentModeScaleAspectFit;//防止图片在变换的过程中失真

self.imageview.frame = CGRectMake(0, 0, img.size.width, img.size.height);

//设置scrollView(位置和大小即 origin.x 、origin.y、 size.width 、size.height)

self.scrollview.contentSize = img.size; //直接将滚动视图中存放内容的范围大小设置为图片的大小

self.scrollview.contentOffset = CGPointZero;//默认origin.x = 0,orgin.y = 0

//弹簧效果(所谓弹簧效果就是不论图片被拽托到滚动图内那儿松开后都会返回原来的位置上)

self.scrollview.bounces = NO;

//添加四条边距(相当于相框部分)

self.scrollview.contentInset = UIEdgeInsetsMake(10, 10, 10, 10);

//滚动效果(图片太大时,能否拖拽着移动查看其他部分)

self.scrollview.scrollEnabled = YES;

//滚动条的设置(类似于滑块,有上下滑动的,也有左右滑动的)

//self.scrollview.showsHorizontalScrollIndicator = NO;//水平方向

//self.scrollview.showsVerticalScrollIndicator = NO;  //垂直方向

//设置滚动条的样式

self.scrollview.indicatorStyle = UIScrollViewIndicatorStyleBlack;

//将视图添加到滚动视图中

[self.scrollview addSubview:self.imageview];

//将视图设置到滚动视图最后面(如果在滚动视图上添加其他的控件如UIButton,采取这种方式可以避免button控件被图片遮盖)

[self.scrollview sendSubviewToBack:self.imageview];

//设置滚动视图的代理

self.scrollview.delegate = self;

//设置滚动视图的放大和缩小的系数

self.scrollview.minimumZoomScale = 0.8;

self.scrollview.maximumZoomScale = 2.0;

//将滚动视图添加到视图中

[self.view addSubview:self.scrollview];

//添加按钮事件来滚动图片

- (IBAction)buttonClicked:(UIButton *)sender

{

CGPoint point = self.scrollview.contentOffset;

self.scrollview.contentOffset = CGPointMake(point.x+20, point.y);

}

//代理实现UIScrollView的方法

#pragma mark - UIScrollView

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView  //实现图片的放缩

{

   return  self.imageview;

  }

-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale

{

   NSLog(@"view:%@,scale:%f",view,scale); //输出放缩后的视图信息和放缩系数

}

二、图片轮转播放器案例:

具体代码如下:

 #import "ViewController.h"

 @interface ViewController ()<UIScrollViewDelegate> //实现滚动视图协议
@property (strong,nonatomic)UIScrollView *scrollview; //滚动视图控件对象
@property (strong,nonatomic)UIPageControl *pagecontrol;//分页控制控件对象
@end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
//创建ScrollView并初始化
self.scrollview = [[UIScrollView alloc]initWithFrame:CGRectMake(, , self.view.frame.size.width, self.view.frame.size.height)];
//将滚动视图添加到视图控制器控制的视图View容器中
[self.view addSubview:self.scrollview]; //创建5个imageView对象并加载图片
CGFloat x = ;
CGFloat y = ;
UIImage *image;
for(int i=; i<; i++)
{
UIImageView *imageview = [[UIImageView alloc]init];
image = [UIImage imageNamed:[NSString stringWithFormat:@"s%d.jpg",i+]];
[imageview setImage:image];
//设置每一个图像视图imageView的frame矩形区域
imageview.frame = CGRectMake(x+self.view.frame.size.width*i, y, self.view.frame.size.width, image.size.height);
//设置图像模式,使图片变动时,图片不失真
imageview.contentMode = UIViewContentModeScaleAspectFit;
//将图像视图添加到滚动视图容器中
[self.scrollview addSubview:imageview];
} //设置scrollView
self.scrollview.contentSize = CGSizeMake(*self.view.frame.size.width, self.view.frame.size.height);//有多少图片,那么滚动视图的滚动宽度就等于图片数量乘以你所设置的单个滚动视图矩形区域的宽度
self.scrollview.contentOffset = CGPointZero;//默认滚动视图的初始原点位置都为0
self.scrollview.pagingEnabled = YES;//设置滚动视图可以进行分页
self.scrollview.delegate = self;//设置滚动视图的代理 //创建初始化并设置PageControl
self.pagecontrol = [[UIPageControl alloc]init];
self.pagecontrol.bounds = CGRectMake(, , , );
self.pagecontrol.center = self.view.center;
self.pagecontrol.numberOfPages = ; //因为有5张图片,所以设置分页数为5
self.pagecontrol.currentPage = ; //默认第一页页数为0
//设置分页控制点颜色
self.pagecontrol.pageIndicatorTintColor = [UIColor redColor];//未选中的颜色
self.pagecontrol.currentPageIndicatorTintColor = [UIColor greenColor];//选中时的颜色
//添加分页控制事件用来分页
[self.pagecontrol addTarget:self action:@selector(pageControlChanged:) forControlEvents:UIControlEventValueChanged];
//将分页控制视图添加到视图控制器视图中
[self.view addSubview:self.pagecontrol];
//设置试图控制器背景色为黑色
self.view.backgroundColor = [UIColor blackColor];
}
#pragma mark - pageControll的事件响应
-(void)pageControlChanged:(UIPageControl*)sender
{
/*
//NSLog(@"%ld",sender.currentPage);
CGRect frame;
frame.origin.x = self.scrollview.fram
e.size.width * sender.currentPage;
frame.origin.y = 0;
frame.size = self.scrollview.frame.size;
[self.scrollview scrollRectToVisible:frame animated:YES];
*/
或者
//计算scrollview相应地contentOffset
CGFloat x = sender.currentPage * self.scrollview.frame.size.width;
self.scrollview.contentOffset = CGPointMake(x,); } #pragma mark - scrollView的代理方法
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
//计算pagecontroll相应地页(滚动视图可以滚动的总宽度/单个滚动视图的宽度=滚动视图的页数)
NSInteger currentPage = (int)(scrollView.contentOffset.x) / (int)(self.view.frame.size.width);
self.pagecontrol.currentPage = currentPage;//将上述的滚动视图页数重新赋给当前视图页数,进行分页
}
@end

iOS:UIScrollView控件和UIPageControl控件的详解的更多相关文章

  1. ActiveX控件打包、签名、嵌入详解

    ActiveX控件打包.签名.嵌入详解 前言 在我们的一个项目中,使用到了大华网络监控摄像头枪机,网络上下载了其ActiveX插件,但是发现其所提供的类库没有打包处理.这就导致我们每次给用户安装的时候 ...

  2. iOS之UI--使用SWRevealViewController 实现侧边菜单功能详解实例

     iOS之UI--使用SWRevealViewController 实现侧边菜单功能详解实例 使用SWRevealViewController实现侧边菜单功能详解 下面通过两种方法详解SWReveal ...

  3. C# 控件双缓冲控制 ControlStyles 枚举详解

    ControlStyles 枚举 .NET Framework 4    指定控件的样式和行为. 此枚举有一个 FlagsAttribute 特性,通过该特性可使其成员值按位组合. 命名空间:  Sy ...

  4. iOS之UI--使用SWRevealViewController实现侧边菜单功能详解实例

    使用SWRevealViewController实现侧边菜单功能详解 下面通过两种方法详解SWRevealViewController实现侧边菜单功能: 1.使用StoryBoard实现   2.纯代 ...

  5. 【IOS 开发】Object-C 入门 Xcode 环境详解

    作者 : 韩曙亮 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/38424965 一. Xcode 环境安装 与 工程创建 1. ...

  6. Web自动化框架LazyUI使用手册(4)--控件抓取工具Elements Extractor详解(批量抓取)

    概述 前面的一篇博文详细介绍了单个控件抓取的设计思路&逻辑以及使用方法,本文将详述批量控件抓取功能. 批量抓取:打开一个web页面,遍历页面上所有能被抓取的元素,获得每个元素的iframe.和 ...

  7. 转:iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解

    1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...

  8. iOS 屏幕适配,autoResizing autoLayout和sizeClass图文详解

    === 1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS ...

  9. IOS 开发环境,证书和授权文件等详解

    (转自:http://blog.csdn.net/gtncwy/article/details/8617788) 一.成员介绍1.    Certification(证书)证书是对电脑开发资格的认证, ...

随机推荐

  1. 启动win8.1时提示 api-ms-win-crt-runtime-l1-1-0.dll丢失

    电脑里没有安装windows的更新KB2999226 到微软官网 https://www.microsoft.com/zh-cn/download/details.aspx?id=49081 下载对应 ...

  2. POJ - 1329 Circle Through Three Points 求圆

    Circle Through Three Points Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4112   Acce ...

  3. Python并发编程系列之多线程

    1 引言 上一篇博文详细总结了Python进程的用法,这一篇博文来所以说Python中线程的用法.实际上,程序的运行都是以线程为基本单位的,每一个进程中都至少有一个线程(主线程),线程又可以创建子线程 ...

  4. Java注解Annotation(一)

    Java注解Annotation(一)——简介 这一章首先简单介绍一下注解,下一章会给出一个注解应用的DEMO. 1. 元注解 元注解的作用是负责注解其他的注解. JDK1.5中,定义了4个标准的me ...

  5. [漏洞复现] CVE-2017-11882 通杀所有Office版本

    此漏洞是由Office软件里面的 [公式编辑器] 造成的,由于编辑器进程没有对名称长度进行校验,导致缓冲区溢出,攻击者通过构造特殊的字符,可以实现任意代码执行. 举个例子,如果黑客利用这个漏洞,构造带 ...

  6. win10怎么修改svn的用户和密码

    win10怎么修改svn的用户和密码(一般为默认),其他的系统也差不多 方法/步骤 1.方法一: 1.双击我的电脑在c盘找到auth文件夹 C:\Users\系统帐户名\AppData\Roaming ...

  7. 1036 Boys vs Girls (25)(25 point(s))

    problem This time you are asked to tell the difference between the lowest grade of all the male stud ...

  8. leetcode x 的平方根 python

     x 的平方根     实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: ...

  9. 机器学习之路:python线性回归分类器 LogisticRegression SGDClassifier 进行良恶性肿瘤分类预测

    使用python3 学习了线性回归的api 分别使用逻辑斯蒂回归  和   随机参数估计回归 对良恶性肿瘤进行预测 我把数据集下载到了本地,可以来我的git下载源代码和数据集:https://gith ...

  10. python中的super( test, self).__init__()

    python中的super( test, self).__init__() 对继承自父类的属性进行初始化 首先找到test的父类(比如是类A),然后把类test的对象self转换为类A的对象,然后“被 ...