【UIScrollView介绍】
·UIScrollView继承自UIView
·UIScrollView 可以实现页面的水平或者垂直滚动,其原理是通过对水平坐标的偏移量或者垂直坐标的偏移量来实现的。
·由于UIScrollView继承自UIView,所以UIScrollView的创建可以根据UIView的方式创建,而且UIScrollView没有自己的自定义初始化方法。
·UIScrollView常用在轮播图的使用中,可以和NSTimer一起使用,来实现自动轮播图
【几个常见和常用的属性】
1.【contentSize】
contentSize是UIScrollView的一条重要属性,只有设置了这个属性UIScrollView才可以滚动,在设置这个属性时如果是水平滚动设置width,如果是垂直滚动设置height
scrollView.contentSize = CGSizeMake(8 * WIDTH, 0);// 水平滚动设置with
scrollView.contentSize= CGSizeMake(0, 8 * HEIGHT);// 垂直滚动设置height
contentsize是对滚动视图的容量大小进行设置,8 * WIDTH是总共有8个视图。
2.【pagingEnabled】
pagingEnabled是UIScrollView中对滚动方式进行设置的属性,BOOL类型。默认为NO
scrollView.pagingEnabled = YES// 按照页进行滚动
3.【bounces】
bounces 是UIScrollView中对边界回弹效果进行设置的属性,为BOOL类型,默认为YES。
scrollView.bounces = NO;// 关闭边界回弹效果
4.【showsHorizontalScrollIndicator 和showsVerticalScrollIndicator】
showsHorizontalScrollIndicator和showsVerticalScrollIndicator分别是对水平和垂直滚动条状态进行设置的属性,可以设置水平和垂直滚动条是否显示,为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 = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];// 创建一个UIScrollView
scrollView.backgroundColor = [UIColor whiteColor];// 设置背景色
[self.view addSubview: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.view viewWithTag: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 = [NSString stringWithFormat:@"h%ld.jpeg", i];
// 把图片放到imageView上
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(WIDTH * (i - 1), 0, WIDTH, HEIGHT)];// 此处设置坐标时要注意
imageView.image = [UIImage imageNamed:imageName];
[scrollView addSubview:imageView];
[imageView release];
}