UI第七天:UIScrollView、UIPageContro

原创 2015年11月18日 21:06:28
⼀、UIScrollView的常⽤属性
UIScrollView是可以滚动的view,UIView本⾝不能滚动,⼦类 UIScrollview拓展了滚动⽅⾯的功能。
UIScrollView是所有滚动视图的基类。以后的UITableView, UITextView等视图都是继承于该类。
UIScrollView核⼼功能
UIScrollview主要专⻓于两个⽅⾯:
滚动:contentSize⼤于frame.size的时候,能够滚动。
缩放:⾃带缩放,可以指定缩放倍数。
UIScrollView滚动相关属性
contentSize //定义内容区域⼤⼩,决定是否能够滑动
contentOffset //视图左上⾓距离坐标原点的偏移量
scrollsToTop //滑动到顶部(点状态条的时候)
pagingEnabled //是否整屏翻动
bounces //边界是否回弹
scrollEnabled //是否能够滚动
showsHorizontalScrollIndicator //控制是否显⽰⽔平⽅向的滚动条
showVerticalScrollIndicator //控制是否显⽰垂直⽅向的滚动条
alwaysBounceVertical //控制垂直⽅向遇到边框是否反弹
alwaysBounceHorizontal //控制⽔平⽅向遇到边框是否反弹
UIScrollView缩放相关属性
minimumZoomScale // 缩⼩的最⼩⽐例
maximumZoomScale //放⼤的最⼤⽐例
zoomScale //设置变化⽐例
zooming //判断是否正在进⾏缩放反弹
bouncesZoom //控制缩放的时候是否会反弹
要实现缩放,还需要实现delegate,指定缩放的视图是谁。



⼆、UIScrollView的常⽤代理⽅法



三、UIPageControl的使⽤
UIPageControl与UILabel相似
⽤于指⽰当前第⼏⻚(代码)
通常与UIScrollView配合使⽤

currentPage //当前⻚
numberOfPages //指定⻚⾯的个数
UIPageControl从类名中可以看出,其⽗类是UIControl 。
所以可以像button⼀样添加事件,只不过事件触发使⽤的不是 UIControlEventsTouchUpInside⽽是 UIControlEventsValueChanged。

四、UIPageControl与UIScrollView的结合使⽤
//要实现每一张图片都能进行缩放
   
//缩放是scrollview的方法 要指定一个子视图进行缩放
   
//这时候 需要的结构
   
//先创建一个大的scrollview专门控制左右滑动
   
//大的scrollview上创建小的scrollview
   
//利用小的scrollview来控制上面视图进行缩放
   
   
self.bgScroll = [[UIScrollView alloc]initWithFrame:[UIScreen mainScreen].bounds];
   
self.bgScroll.contentSize = CGSizeMake(self.view.frame.size.width*8, self.view.frame.size.height);
   
self.bgScroll.backgroundColor = [UIColor yellowColor];
    [
self.view addSubview:self.bgScroll];
   
self.bgScroll.bounces = YES;
   
self.bgScroll.alwaysBounceHorizontal = YES;
  
// bgScroll.alwaysBounceVertical = YES;
   
self.bgScroll.showsHorizontalScrollIndicator = YES;
  
// bgScroll.showsVerticalScrollIndicator = YES;
   
self.bgScroll.pagingEnabled =YES;
   
self.bgScroll.delegate = self;
   
self.bgScroll.contentOffset =CGPointMake(self.view.frame.size.width, 0);
    [
self.bgScroll release];
   
   
//循环创建的不能写成属性
   
for (int i = 0; i < 8; i++) {
       
UIScrollView  *smallScroll = [[UIScrollView alloc]initWithFrame:CGRectMake(self.view.frame.size.width*i, 0, self.view.frame.size.width, self.view.frame.size.height)];
        smallScroll.
contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height);
        smallScroll.
backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];
       
NSString *str = [NSString stringWithFormat:@"%d.jpg",i+1];
       
UIImage *image = [UIImage imageNamed:str];
       
UIImageView *imageview = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds];
        imageview.
image =image;
        [smallScroll
addSubview:imageview];
      
       
        [imageview
release];
        smallScroll.
minimumZoomScale = .5;
        smallScroll.
maximumZoomScale = 2;
        smallScroll.
delegate =self;
        [
self.bgScroll addSubview:smallScroll];
        [smallScroll
release];
    }
   
self.page = [[UIPageControl alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height-50, self.view.frame.size.width, 50)];
   
self.page.numberOfPages = 6;
   
self.page.currentPage = 0 ;
    [
self.page addTarget:self action:@selector(page:) forControlEvents:UIControlEventValueChanged];
    [
self.view addSubview:self.page];
    [
self.page release];
   
   
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timer:) userInfo:@"123" repeats:YES];
    [timer
fire];
   
}
//- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
//    [scrollView setZoomScale:1 animated:YES];
//}

-(
UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
   
return scrollView.subviews[0];
}
-(
void)scrollViewDidZoom:(UIScrollView *)scrollView
{
   
UIImageView *image =scrollView.subviews[0];
    image.
center = self.view.center;
}
-(
void)scrollViewDidScroll:(UIScrollView *)scrollView
{
   
if (self.bgScroll.contentOffset.x<1) {
        [
self.bgScroll setContentOffset:CGPointMake(self.view.frame.size.width*6, 0) animated:NO];
       
self.page.currentPage = 5;
    }
else if (self.bgScroll.contentOffset.x>self.view.frame.size.width*7-1) {
        [
self.bgScroll setContentOffset:CGPointMake(self.view.frame.size.width, 0) animated:NO];
       
self.page.currentPage = 0;
    }
else{
       
self.page.currentPage = (self.bgScroll.contentOffset.x/self.view.frame.size.width)-1;
    }
}
// 连接UIPageContr的代理方法
-(
void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
//    if (self.bgScroll.contentOffset.x<self.view.frame.size.width) {
//        [self.bgScroll setContentOffset:CGPointMake(self.view.frame.size.width*6, 0) animated:NO];
//        self.page.currentPage = 5;
//    }else if (self.bgScroll.contentOffset.x>self.view.frame.size.width*6) {
//        [self.bgScroll setContentOffset:CGPointMake(self.view.frame.size.width, 0) animated:NO];
//        self.page.currentPage = 0;
//    }else{
//    self.page.currentPage = (self.bgScroll.contentOffset.x/self.view.frame.size.width)-1;
//    }
   
for (int i = 1; i < self.page.numberOfPages+1; i++) {
       
UIScrollView *scroll = self.bgScroll.subviews[i];
        [scroll
setZoomScale:1 animated:YES];
       
    }
   
}
-(
void)page:(UIPageControl *)page
{
   
    [
self.bgScroll setContentOffset:CGPointMake(self.view.frame.size.width*(self.page.currentPage+1), 0) animated:YES];
   
for (int i = 1; i < self.page.numberOfPages+1; i++)
    {
       
UIScrollView *scroll = self.bgScroll.subviews[i];
        [scroll
setZoomScale:1 animated:YES];
       
    }
}
总结
contentSize决定了scrollView能否滚动,contentOffset控制内容区域 的偏移量,pageEnabled控制能否整⻚滚动。
scrollView实现缩放需要指定最⼤缩放系数,最⼩缩放系数,并指定 缩放的视图。
pageControl不单独使⽤,通常与scrollView结合使⽤

版权声明:本文为博主原创文章,未经博主允许不得转载。

UI - 关于自动调整内边距问题的细节

iOS 7 以后 , 苹果推出了 控制器 automaticallyAdjustsScrollViewInsets 属性 , 目的在于自动帮我们调整所有继承于 scrollView控件的内边距 ,比如...
  • coderMy
  • coderMy
  • 2016年10月24日 17:47
  • 268

Mysql第七天 查询优化2

查询优化 Mysql
  • three_man
  • three_man
  • 2015年07月20日 19:12
  • 8157

iPhone开发之UIScrollView滚动组件的使用(七)利用NSTimer计时器和UIPageControl组件代码实现图片轮播器

1、分页效果  pagingEnabled实现分页效果,是根据UIScrollView的宽度进行分页的,和内容无关。 2、bringSubviewToFront:  父控件调用此方法可以将某个子控件调...
  • u013087513
  • u013087513
  • 2015年08月29日 20:28
  • 897

UIScrollView 能够缩放的设置

实现UIScrollView的缩放,必须使maximumZoomScale(默认1.0)和minimumZoomScale(默认1.0)不同 ,并且需要在delegate中的viewForZoomin...
  • petyou123
  • petyou123
  • 2016年03月04日 15:37
  • 1126

UIScrollView顶部留有64的空白

今天在使用UIScrollView时,在scrollView里添加了控件。明明添加的控件的frame的y值设置的是0,但是添加的控件总是往下偏移64 。后经过查阅资料发现,原来是automatical...
  • MyKingSaber
  • MyKingSaber
  • 2017年02月08日 16:45
  • 1445

UIScrollView在Autolayout自动布局中如何自适应滚动长度?

在iOS开发中,当使用UIScrollView展示内容时,内容超出屏幕长度的情况下,我们会通过UIScrollView的contentSize来设置它的滚动长度。 如果scrollView上的内容较多...
  • Dacian_zhou
  • Dacian_zhou
  • 2017年05月12日 16:17
  • 788

第七天,动画,UI

书看完辣=W=
  • qq_34550847
  • qq_34550847
  • 2017年01月05日 10:26
  • 96

通过实现一个 TableView 来理解 iOS UI 编程 (个人感觉写的很棒!)

先说点题外话。我们在日常做和IOS的UI相关的工作的时候,有一个组件的使用频率非常高–UITableView。于是就要求我们对UITableView的每一个函数接口,每一个属性都了如指掌,只有这样在使...
  • eyuantdy521
  • eyuantdy521
  • 2015年02月16日 15:28
  • 604

iOS学习之TableView和UIScrollView的综合小应用

这个是结合了tableview控件和scrollview控件完成的商品展示界面
  • it_wjw
  • it_wjw
  • 2016年07月01日 09:28
  • 450

Java进阶学习第七天——泛型与反射回顾

MyEclipse 的 DeBug调试模式 Junit单元测试 MyEclipse的快捷键 泛型 自定义泛形——泛型方法 枚举类 枚举类特性 反射 Class类...
  • lutianfeiml
  • lutianfeiml
  • 2016年04月18日 23:26
  • 816
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UI第七天:UIScrollView、UIPageContro
举报原因:
原因补充:

(最多只允许输入30个字)