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. android网络编程之HttpUrlConnection的讲解--POST请求

    1.服务器后台使用Servlet开发,这里不再介绍. 2.网络开发不要忘记在配置文件中添加访问网络的权限 <uses-permission android:name="android. ...

  2. 轻松创建nodejs服务器(1):一个简单nodejs服务器例子

    这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下   我们先来实现一个简单的例子,hello world ...

  3. 使用PLSQL Developer连接Oracle Database 11g Express Edition

    要使用oracle数据库,需要准备三部分: 1.oracle服务端 2.oracle客户端 3.连接工具 你装的Oracle Database 11g Express Edition就是服务端,pls ...

  4. 一篇很全面的freemarker教程 前端工程师必备

    FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ...

  5. 算法:1!+(1!+3!)+(1!+3!+5!) + ( 1! + 3! + 5! + 7! + 9!)+....+(1!+3!+5!+ ... + m!)

    -(void)touchesBegan:(nonnull NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event{ / ...

  6. 登录数据库后,use db很慢的问题

    mysql> use dbl Reading table information for completion of table and column names You can turn of ...

  7. jQuery实现父窗口的问题

    因为先前遇到的问题,所以我考虑采用 IFRAME 来隔离不同的脚本,从而实现我需要的效果. 在框架中,我用 JavaScript 获取 JSON 数据,组织成 HTML 代码,最后将其填充至上层文档的 ...

  8. WPF Template模版之DataTemplate与ControlTemplate的关系和应用【二】

    1. DataTemplate和ControlTemplate的关系 学习过DataTemplate和ControlTemplate,你应该已经体会到,控件只是数据的行为和载体,是个抽象的概念,至于它 ...

  9. HDU 1155 Bungee Jumping 物理

    题目大意:给出k:绳子的劲度系数,l:绳长,s:桥高,w:邦德的质量,g取9.81.绳子弹力=形变量*劲度系数.如果落地速度大于10 则摔死,小于0则飘着空中. 题目思路:根据能量守恒得知:落地的动能 ...

  10. DEAMONTOOLS: installation

    installing daemontools .. adding -I /usr/include/errno.h to last first line of conf-cc mkdir -p /pac ...