iOS开发之UI_UIScrollView(上)

来源:互联网 发布:大数据服务的简称 编辑:程序博客网 时间:2024/04/30 05:02

UIScrollView介绍】

·UIScrollView继承自UIView

·UIScrollView 可以实现页面的水平或者垂直滚动,其原理是通过对水平坐标的偏移量或者垂直坐标的偏移量来实现的。

·由于UIScrollView继承自UIView,所以UIScrollView的创建可以根据UIView的方式创建,而且UIScrollView没有自己的自定义初始化方法。

·UIScrollView常用在轮播图的使用中,可以和NSTimer一起使用,来实现自动轮播图

【几个常见和常用的属性】

1.【contentSize

contentSizeUIScrollView的一条重要属性,只有设置了这个属性UIScrollView才可以滚动,在设置这个属性时如果是水平滚动设置width,如果是垂直滚动设置height

scrollView.contentSize = CGSizeMake(8 * WIDTH, 0);// 水平滚动设置with

scrollView.contentSize= CGSizeMake(0, 8 * HEIGHT);//垂直滚动设置height

contentsize是对滚动视图的容量大小进行设置,8 * WIDTH是总共有8个视图。

2.pagingEnabled

pagingEnabledUIScrollView中对滚动方式进行设置的属性,BOOL类型。默认为NO

scrollView.pagingEnabled = YES// 按照页进行滚动

3.bounces

bounces UIScrollView中对边界回弹效果进行设置的属性,为BOOL类型,默认为YES

scrollView.bounces = NO;// 关闭边界回弹效果

4.showsHorizontalScrollIndicatorshowsVerticalScrollIndicator

showsHorizontalScrollIndicatorshowsVerticalScrollIndicator分别是对水平和垂直滚动条状态进行设置的属性,可以设置水平和垂直滚动条是否显示,为BOOL类型,默认为YES.

scrollView.showsHorizontalScrollIndicator =NO;// 关闭水平滚动条

scrollView.showsVerticalScrollIndicator =NO;// 关闭垂直滚动条

5.【contentOffset】

contentOffset 是一条重要属性,用来设置偏移量,以此来实现滚动效果

scrollView.contentOffset = CGPointMake(0, 0);// 偏移量设置

6.scrollEnabled

scrollEnabled用来控制滚动的允许与禁止操作

scrollView.scrollEnabled= YES;// 滚动允许

UIScrollView的使用】

1.【创建一个新的UIScrollView】

#define WIDTH self.view.frame.size.width

#defineHEIGHT self.view.frame.size.height

UIScrollView*scrollView = [[UIScrollViewalloc] initWithFrame:CGRectMake(0,0, WIDTH, HEIGHT)];// 创建一个UIScrollView

    scrollView.backgroundColor = [UIColorwhiteColor];// 设置背景色

    [self.viewaddSubview:scrollView];// 添加到当前视图控制器

[scrollView release];// 释放

2.【和NSTimer一起实现自动轮播图】

[NSTimer scheduledTimerWithTimeInterval:0.5target:self selector:@selector(changeImage) userInfo:nil repeats:YES];//此处时间间隔有误差,不能设置太小,否则不能实现图片轮播的效果

- (void)changeImage {

    // 通过tag值找scrollview

    UIScrollView *scrollView = (UIScrollView *)[self.viewviewWithTag:1000];

    // 通过设置偏移量,进而设置让哪一张视图显示在屏幕上,这条属性很重要

//    scrollView.contentOffset =CGPointMake(scrollView.contentOffset.x + WIDTH, 0);

    [scrollView setContentOffset:CGPointMake(scrollView.contentOffset.x +WIDTH, 0) animated:YES];//带有偏移量的偏移量设置

    // 判断是否到当前最后一页,如果到了需要把偏移量设置到第一章图片位置

    if (scrollView.contentOffset.x ==7 * WIDTH) {

        scrollView.contentOffset =CGPointMake(0,0);

    }

}

【滚动相关的两个方法】

以下两个方法为协议方法,经常用到,需要遵守UIScrollViewDelegate协议,并且设置代理人

#pragma mark 只要一拖拽以滚动就会触发这个协议方法

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

    NSLog(@"%g", scrollView.contentOffset.x);

}

#pragma mark 当滑动结束,稳定了之后会被触发

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

    NSLog(@"我被触发了");

    if (scrollView.contentOffset.x ==7 * WIDTH) {// 如果偏移量为7 *WIDTH,则把偏移量改为(0 0),实现向右无限滚动

        scrollView.contentOffset =CGPointMake(0,0);

    }

}

说明:为了能够实现滚动效果流畅没有明显的卡顿现象,一般在向右滚动的处理中,在所有图片的最后再加一张第一幅图片,当滚动到最后一张图片时,让偏移量自动跳转到第一幅图。

// 把图片放到scrollview

    for (NSInteger i =1; i < 8; i++) {

        // 拼接图片名

        NSString *imageName = [NSStringstringWithFormat:@"h%ld.jpeg", i];

        // 把图片放到imageView

        UIImageView *imageView = [[UIImageViewalloc] initWithFrame:CGRectMake(WIDTH * (i -1), 0, WIDTH, HEIGHT)];//此处设置坐标时要注意

        imageView.image = [UIImageimageNamed:imageName];

        [scrollView addSubview:imageView];

        [imageView release];

}

0 0