iOS:UIScrollView控件和UIPageControl控件的详解

时间:2022-09-04 14:55:55
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

iOS:UIScrollView控件和UIPageControl控件的详解

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

iOS:UIScrollView控件和UIPageControl控件的详解 
 
代码范例解析:
  一、单张图片案例:
   (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); //输出放缩后的视图信息和放缩系数

}

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

iOS:UIScrollView控件和UIPageControl控件的详解

具体代码如下:

 #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&num; 控件双缓冲控制 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. Makefile笔记之一 ------ 变量的引用及赋值

    1.变量的引用方式: "$(变量名)"或者"¥{变量名}" 例如: ${Objs}就是取变量Objs的值 注意: 当变量名为单字符是可以采用:"$a& ...

  2. linux 文件权限除了r、w、x外还有s、t、i、a权限:

    s:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行.在设置s权限时文件属主.属组必须先设置相应的x权限,否 则s权限并不能正真生效(c h m o d命令不进行必要的完 ...

  3. iOS copy&amp&semi;mutableCopy理解

    Copy&mutableCopy   通过copy方法可以创建可变或不可变对象的不可变副本,通过mutableCopy可以创建可变或不可变对象的可变副本. 拷贝分为浅拷贝和深拷贝: 浅拷贝:指 ...

  4. 【HDOJ】2844 Coins

    完全背包. #include <stdio.h> #include <string.h> ], c[]; int n, m; ]; int mymax(int a, int b ...

  5. 关于svn的安装问题

    直接把安装包放在 MyEclipse的安装目录下 如果 报错 那么就重装MyEclipse 半个小时左右就OK了不然调错太浪费时间了

  6. SQL Server 锁实验(SELECT加锁探究)

    本例中使用begin tran和with (holdlock)提示来观察SQL Server在select语句中的锁. 开启事务是为了保证时间极短的查询也能观察到锁情况,holdlock相当于开启序列 ...

  7. 【JavaScript从入门到精通】第四课初探JavaScript魅力-04

    第四课初探JavaScript魅力-04 style与className 之前我们已经讲过,style用于在JS里控制元素的样式,通过style可以选中元素的各种css属性.此外,我们也提到过,JS用 ...

  8. L308 New brain cells made throughout life

    People keep making new brain cells throughout their lives (well at least until the age of 97), accor ...

  9. Eclipse 的一些调试技巧(转)

    原文:http://blog.csdn.net/manymore13/article/details/8972602 1.条件断点 如果你不知道如何添加断点,只需点击左边面板(行号前面)断点即被创建. ...

  10. OpenCV学习笔记之课后习题练习3-3

    3.3 创建一个100*100的拥有三个通道的二维字节类型矩阵,将其元素全部置0.通过cvPtr2D函数将指针指向中间通道(绿色),以(20,5)和(40,20)为顶点间画一个绿色的长方形. cvPt ...