UIScrollView属性及其代理方法

一、UIScrollView是什么?

1、UIScrollView是滚动的view,UIView本身不能滚动,子类UIScrollview拓展了滚动方面的功能。
2、UIScrollView是所有滚动视图的基类。以后的UITableView,UITextView等视图都是继承于该类。
使用场景:显示不下(单张大图);内容太多(图文混排);滚动头条(图片);相册等

二、UIScrollView使用

1、UIScrollview主要专长于两个方面:
      a、滚动:contentSize大于frame.size的时候,能够滚动。
      b、 缩放:自带缩放,可以指定缩放倍数。
2、UIScrollView滚动相关属性contentSize
 //定义内容区域大小,决定是否能够滑动
contentOffset    //视图左上角距离坐标原点的偏移量
scrollsToTop      //滑动到顶部(点状态条的时候)
pagingEnabled   //是否整屏翻动
bounces           //边界是否回弹
scrollEnabled     //是否能够滚动
showsHorizontalScrollIndicator //控制是否显示水平方向的滚动条
showVerticalScrollIndicator       //控制是否显示垂直方向的滚动条
alwaysBounceVertical           //控制垂直方向遇到边框是否反弹
alwaysBounceHorizontal       //控制水平方向遇到边框是否反弹
3、UIScrollView缩放相关属性
minimumZoomScale  //  缩小的最小比例
maximumZoomScale   //放大的最大比例
zoomScale                  //设置变化比例
zooming                      //判断是否正在进行缩放反弹
bouncesZoom             //控制缩放的时候是否会反弹
要实现缩放,还需要实现delegate,指定缩放的视图是谁。
4.UIScrollView滚动实例应用
- (void)scrollView{
    // 创建滚动视图,但我们现实的屏幕超过一屏时,就需要滚动视图
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
    scrollView.backgroundColor = [UIColor yellowColor];
    scrollView.tag = 1000;
    // 设置滚动区域
    scrollView.contentSize = CGSizeMake(4 * CGRectGetWidth(self.view.frame), self.view.frame.size.height);
    [self.view addSubview:scrollView];
    // 添加子视图
    for (int i = 0; i < 4; i ++) {
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.view.frame) * i, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame))];
        label.text = [NSString stringWithFormat:@"这是%d个视图",i];
        label.font = [UIFont systemFontOfSize:30];
        [scrollView addSubview:label];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i]]]; // (有四张片分别取名0.jpg,1.jpg,2.jpg.3.jpg)
        [imageView setFrame:self.view.frame];
        [label addSubview:imageView];

//        label.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:
//            arc4random()%256/255.0  blue:arc4random()%256/255.0  alpha:1];
        
    }
    // 设置分页效果 (默认值为NO)
    scrollView.pagingEnabled = YES;
    // 设置滚动条是否显示(默认值是YES)
    scrollView.showsHorizontalScrollIndicator = YES;
    // 设置边界是否有反弹效果(默认值是YES)
    scrollView.bounces = YES;
    // 设置滚动条的样式
    scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    /*
indicatorStyle(枚举值)  
   UIScrollViewIndicatorStyleDefault,     //白色
   UIScrollViewIndicatorStyleBlack,       //  黑色
     */
    
    // 设置scrollView的代理
    scrollView.delegate = self; // (记得导入协议代理 <UIScrollViewAccessibilityDelegate>)
}

5、UIScrollView滚动代理方法
// 滚动就会触发
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{    NSLog(@"只有scrollview是跟滚动状态就会调用此方法");
}
//开始拖拽时触发
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    NSLog(@"开始拖拽");
    
}
// 结束拖拽时触发
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView  willDecelerate:(BOOL)decelerate{
        NSLog(@"结束拖拽");
}
// 开始减速时触发
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
        NSLog(@"开始减速");
    
}
// 结束减速时触发(停止)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
        NSLog(@"结束减速(停止)");
}
6、UIScrollView缩放实例应用
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor orangeColor];
    // 初始化一个scrollView
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
    scrollView.backgroundColor = [UIColor greenColor];
    scrollView.delegate = self;


    // 设置缩放比率
    // 设置可缩小道德最小比例
    scrollView.minimumZoomScale = 0.5;
    // 设置可放大的最大比例
    scrollView.maximumZoomScale = 2.0;
 [self.view addSubview:scrollView];

    // 使得要添加的图片宽高成比例
    UIImage *myImage = [UIImage imageNamed:@"7.jpg"];
    // 得到原始宽高
    float imageWidth = myImage.size.width;
    float imageHeight = myImage.size.height;
    // 这里我们规定imageView的宽为200,根据此宽度得到等比例的高度
    float imageViewWidth = 200;
    float imageViewHeight = 200 *imageHeight/imageWidth;
    // 初始化一个UIimageview
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, imageViewWidth, imageViewHeight)];
    // 为imageView设置图片
    imageView.image = myImage;
    // 让imageView居中
    imageView.center = self.view.center;
    imageView.tag = 1000;
    [scrollView addSubview:imageView];
    
}

7、UIScrollView缩放有关的代理
#pragma mark -- 滚动视图与缩放有关的代理方法
//指定scrollview的某一个子视图为可缩放视图,前提条件是次视图已经添加到scrollview上面
-(UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView{
    UIView *imageView = (UIView*)[scrollView viewWithTag:1000];
    return imageView;
}

// 开始缩放的代理方法  第二个参数view:这个参数使我们将要缩放的视图(这里就是imageView)
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{
    NSLog(@"%@",view);
    
}

// 正在缩放的代理方法  只要在缩放就执行该方法,所以此方法会在缩放过程中多次调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
    // 在缩放过程中为了使得该视图一直在屏幕中间,所以我们需要在他缩放的过程中一直调整他的center
    // 得到scrollview的子视图
    UIImageView *imageView = (UIImageView *)[scrollView viewWithTag:1000];
    // 打印imageView的frame,分析为什么他的位置会改变
  //  NSLog(@"frame -- %@",NSStringFromCGRect(imageView.frame));
    
    // 设置imageview的center,是他的位置一直在屏幕中央
    imageView.center = scrollView.center;
    // 打印contentSize  分析为什么缩放之后会滑动
    NSLog(@"contentSize %@",NSStringFromCGSize(scrollView.contentSize));
}


// 缩放结束所执行的代理方法
/**
 *  @ view    当前正在缩放的视图
 *  @ scale  当前正在缩放视图的缩放比例
 */
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{
    // 缩放完成之后恢复原大小,这里运用到2D仿射变换函数中与捏合有关的函数
    view.transform =CGAffineTransformMakeScale(1, 1);
       
    
}
8、成品 (可以左右滑动切换图片)
这是第0个视图.png
这是第2个视图.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容