UIScrollView

【滚动视图】非常重要

UIScrollView是滚动视图,是其它带有滚动功能视图的父类,

本身不显示或者只显示背景,主要负责子视图的滚动和翻页。

一、常用属性

1、基本方法

  a、设置内容尺寸

//设置滚动视图的contentSize

self.scrollView.contentSize = self.label.frame.size;

//内容的尺寸,默认情况下 内容的尺寸等于 视图的大小

  b、是否滚动、边界回弹、指示条、一直滚动

//设置是否能滚动 ,默认YES

//scrollView.scrollEnabled = NO;

//滚动条

//是否显示水平方向的滚动条

scrollView.showsHorizontalScrollIndicator = YES;

//是否显示垂直方向的滚动条

scrollView.showsVerticalScrollIndicator = NO;

//滚动条风格

//UIScrollViewIndicatorStyleDefault,

//UIScrollViewIndicatorStyleBlack,

// UIScrollViewIndicatorStyleWhite

scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;

//设置是否可以回弹

scrollView.bounces = YES;

//水平方向一直可以滚动(YES可以滚动),条件:内容的大小小于视图的大小,回弹必须是YES

scrollView.alwaysBounceHorizontal = YES;

//垂直方向一直可以滚动

scrollView.alwaysBounceVertical = YES;

  c、松手后的减速的加速度

//设置松手以后减速的加速度

//CGFloat UIScrollViewDecelerationRateNormal 正常减速

//CGFloat UIScrollViewDecelerationRateFast 快速减速

scrollView.decelerationRate = UIScrollViewDecelerationRateFast;

        d、点击状态栏回滚到顶部

//点击状态栏自动滚回顶部,默认yes;

scrollView.scrollsToTop = YES;

        e、设置偏移偏移量

//设置偏移,重要属性

scrollView.contentOffset = CGPointMake(300, 300);

//等5秒调用self 的 wait方法

[self performSelector:@selector(wait) withObject:nil afterDelay:5];

- (void)wait {

//设置偏移,带有动画效果

[_scrollView setContentOffset:CGPointMake(100, 100) animated:YES];

}

也就是上边的动画结束,调用方法

//用代码写 offset 滚动的时候 才会调用这个方法

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {

NSLog(@"代码方式,滚动动画结束");

}

        f 、按页滚动

//设置是否可以按页滚动,默认NO;

scrollView.pagingEnabled = YES;

//如果滚动视图的宽度,正好是子视图的宽度的整数倍,正好按页滚动,一页一页的完整显示

        g、缩放相关

//设置缩放的大小,必须设置代理才能缩放(实现对应的方法viewForZoomingInScrollView)

scrollView.delegate = self;

//最小缩放倍数

scrollView.minimumZoomScale = 0.5;

//最大缩放倍数

scrollView.maximumZoomScale = 2.0;

/**

*  实现代理方法

*/

//指定需要缩放的视图

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

return scrollView.subviews[0];

}

2、代理方法

        a、滚动

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {

NSLog(@"即将开始拖拽");

}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

NSLog(@"已经停止拖拽");

}

        b、自由减速

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {

NSLog(@"即将开始减速");

}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

NSLog(@"停止结束 减速");

}

        c、代码方式滚动结束

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {

NSLog(@"代码方式,滚动动画结束");

}

        d、缩放相关

//指定需要缩放的视图

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

return scrollView.subviews[0];

}

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {

NSLog(@"即将开始缩放");

}

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

NSLog(@"已经结束缩放");

}

二、按页控制

应用

UIScrollView常用属性

contentSize

contentInset 不常用

bounces 弹簧效果

pagingEnabled 是否是分页滑动效果

scrollEnabled 是否允许滑动,如果设置为no,则只能通过方法滑动,不能通过手势滑动

showsHorizontalScrollIndicator 显示水平滚动条

showsVerticalScrollIndicator 显示垂直滚动条

indicatorStyle 滚动条风格

scrollIndicatorInsets 滚动条inset, 不常用

decelerationRate 松手后加速度,设置越大,停下来越慢,不常用

scrollsToTop 是否支持点击 statusbar回到顶端,默认YES

isTracking // 只读属性,判断滚动视图是否被触摸,可能还没有滑动

isDragging // 只读属性,判断滚动视图是否被滑动,指手未松开

isDecelerating // 只读属性,判断是否在减速运动,指手指松开后

缩放:

minimumZoomScale

maximumZoomScale

实现UIScrollView的缩放,必须使maximumZoomScale(默认1.0)和minimumZoomScale(默认1.0)不同 ,并且需要在delegate中的viewForZoomingInScrollView: 方法中返回需要缩放的view。实现以上即可进行缩放。

pragma mark -

// return a view that will be scaled. if delegate returns nil, nothing happen

  • (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView {

    // 返回哪个子视图被缩放

    // 一般来讲,不缩放scrollView本身,只缩放返回的子视图

    return scrollView.subviews[0];

    }
  • (void)scrollViewDidZoom:(UIScrollView *)scrollView;
  • (void)scrollViewDidEndZooming:(UIScrollView )scrollView withView:(UIView )view atScale:(CGFloat)scale;
  • (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

// 一旦滚动,就会无条件调用,没有任何时间点

// 无论手指在拖还是不在拖

  • (void)scrollViewDidScroll:(UIScrollView *)scrollView;

// 在松开手指的那一瞬间被调用

  • (void)scrollViewWillEndDragging:(UIScrollView )scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint )targetContentOffset {
  • // NSLog(@”将要结束滚动”);
  • // NSLog(@”加速度:%f %f”, velocity.x, velocity.y);
  • // NSLog(@”预测停留点:%f %f”, targetContentOffset.x, targetContentOffset.y);
  • // velocity: 加速度
  • // targetContentOffset: 预测将要停留的点
  • }

// 滑动结束,将要开始减速

// 手指离开了,但实际上scrollView并不一定结束了滚动

  • (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
  • ;

// 将要减速

  • (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;

// 减速结束

  • (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

// 结速滚动后调用,要通过代码让它滚动时,此方法才会被调用

  • (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {

    NSLog(@”通过代码滚动结束”);

    }

// 当用户点出iPhone状态条时,滚动视图委托可以决定视图是否滚动回到开头

  • (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView {



    // NSLog(@”已经滚动到顶部”);

    }

页控制   UIPageControl

//创建一个Scrollview

- (void)createScrollView {

UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];

self.scrollView = scrollView;

self.scrollView.pagingEnabled = YES;

//设置代理

scrollView.delegate = self;

[self.view addSubview:scrollView];

[self createPageControl];

}

#pragma mark - UIScrollViewDelegate

//结束减速代理

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

//设置pageControl的小圆点

//contenOfsset   用滚动视图水平方向的偏移量 除以scrollView的宽度 ,得出当前所在页面

NSInteger currentPage = scrollView.contentOffset.x / scrollView.frame.size.width;

//设置pageControl的选中点

self.pageControl.currentPage = currentPage;

}

- (void)createPageControl {

UIPageControl *pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake((self.view.frame.size.width - 300 ) / 2, 500, 300,40)];

self.pageControl = pageControl;

[self.view addSubview:pageControl];

pageControl.numberOfPages = 4;

//设置小圆点

pageControl.pageIndicatorTintColor = [UIColor purpleColor];

//设置选中的小圆点的颜色

pageControl.currentPageIndicatorTintColor = [UIColor greenColor];

//添加事件

[pageControl addTarget:self action:@selector(pageControlPressed:) forControlEvents:UIControlEventValueChanged];

}

//pageControl值发生变化

- (void)pageControlPressed:(UIPageControl*)sender {

//设置滚动视图的偏移量

//得到水平偏移量

CGFloat offsetX = sender.currentPage * _scrollView.frame.size.width;

[_scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];

}

UIScrollView 和 UIPageControl的更多相关文章

  1. UI:UIScrollView、UIPageControl

    一.UIScrollView的常⽤用属性 二.UIScrollView的常⽤用代理方法 三.UIPageControl的使⽤用 四.UIPageControl与UIScrollView的结合使⽤用 U ...

  2. UIScrollView和UIPageControl学习使用

    # UIScrollView和UIPageControl # 概要 对于同一个页面需要展示很多图片信息.子视图等的这样的需求,我们可以采用控件UIScrollVIew,与之常常一起使用的控件是UIPa ...

  3. 使用UIScrollView和UIPageControl做一个能够用手势来切换图片的效果

    利用UIScrollView的滚动效果来实现,先上图: 实现过程是:在viewController里先增加UIScrollView和UIPageControl: -(void) loadView { ...

  4. iOS开发 首次启动显示用户引导,第二次启动直接进入App,UIScrollView,UIPageControl,NSUserDefaults

    首先创建一个引导图的控制器类 UserGuideViewController.h和UserGuideViewController.m #import <UIKit/UIKit.h> #im ...

  5. UIscrollView和UIPageControl的循环滚动

    因为昨天在网上找了很久,很多只能实现向右滚动,而且一张图一个imageview ,感觉工作量很可怕啊 ,  下面的例子就是不论你多少图 , 只和我代码里面的几个数值有关,  只需要修改分页和循环i的最 ...

  6. iOS— UIScrollView和 UIPageControl之间的那些事

    本代码主要实现在固定的位置滑动图片可以切换. 目录图如下: ViewController.h #import <UIKit/UIKit.h> // 通过宏定义定义宽和高 #define W ...

  7. IOS 欢迎页(UIScrollView,UIPageControl)

    本文介绍了app欢迎页的简单实现.只有第一次运行程序时才说会出现,其余时间不会出现.下面是效果图. 代码如下:(如有不明白的可以评论我,我会详细讲解) // // ViewController.m / ...

  8. UIScrollView -2(UIScrollView 与 UIPageControl的使用): 分页查看图片

    1.初始化UIScrollView 2.设置初始化出来的UIScrollView的contentSize: myscrollview.contentSize =CGSizeMake(CGRectGet ...

  9. iOS:UI系列之UIScrollview和UIPagecontrol

    转眼间,又是一天,就这样忙忙碌碌的一天一天的过着, 不过还好,不是浑浑噩噩的,也算是小有所成,劳有所获吧,嘿嘿! 好了,到了总结的时间啦, 下面就为大家简单讲解下我今天学习的内容吧,希望对各位都有所帮 ...

  10. 利用UIScrollView和UIPageControl实现多页图片欢迎页面

    在.h文件当中实现UIScrollViewDelegate协议,让控制器充当代理: #import <UIKit/UIKit.h> @interface RPRootViewControl ...

随机推荐

  1. RESTful架构1--架构理解

    转自:理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时( ...

  2. form异步无刷新提交,提交后可以显示弹出框,否则弹出框会被刷新不见,使用 preventDefault

    出错点:确认按钮上.加onclick事件.每次点击都会追加给form追加on监听方法.累加on方法,重复提交 suppress_exception:true 阻止异常 (百度推送 jdk) 向下按 p ...

  3. openwrt 中make的使用

    make 命令简单说明 make V=99 V=99表示输出详细的debug信息 make world 表示编译所有 make j=2 V=99 如是多核CPU,加j=2 选项理论上能加快编译速度 m ...

  4. java 集合中将元素倒序排列

    方法一:实现Comparable接口排序package collsort.comparable; package com.cvicse.sort.comparable; public class Ca ...

  5. php的memcache和memcached扩展区别【转载】

    老生长谈的问题了.我这里就整理一下. memcache的文档在:http://pecl.php.net/package/memcache memcached的文档在:http://pecl.php.n ...

  6. Qt Creator下载和安装(详细教程)

    简介 Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project. ...

  7. VS2010 自定义向导

    最近在学OpenGL,不想使用OpenGL的GLUT工具,自己写了一个初始化OpenGL的类,并在win32中使用,每次都要新建一个win32项目,然后将OpenGL初始化类拷贝到项目,然后进行各种初 ...

  8. Python 3.5.1 Syntax & APIs(Continue Updating..

    print(x, end=' ') instead of print(x) to escape the default line-changing-output. print(str.ljust(si ...

  9. MonkeyRunner 实现自动点击截屏后与本地图库进行对比输出

    先说下本人是菜鸟,通过网上资料学习,终于调通了MonkeyRunner 实现自动点击截屏后与本地图库进行对比输出,以后做静态UI测试就不需要眼睛盯着看图了,这一切交给MonkeyRunner了. 首先 ...

  10. publish over ssh

    http://stackoverflow.com/questions/22158092/jenkins-transferring-0-files-using-publish-over-ssh-plug ...