UIScrollView可以用于显示多于一个屏幕的内容,超出屏幕范围的内容可以通过滑动进行查看,附上轮播图的传送门。
我们来试着做一个简单的,首先我们可以用宏定义来保存屏幕的高度跟宽度。
// 定义保存屏幕宽度和高度的宏
#define kWidth self.view.frame.size.width
#define kHeight self.view.frame.size.height
接下来,就到了创建,跟设置了。
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, kWidth, kHeight)];
// 设置滚动视图的相关属性
// 1、滚动区域,内容区域的大小
// 如果想要实现滚动操作,有三种情况
/**
1、内容视图(滚动区域)的宽度大于滚动视图的宽
2、内容视图(滚动区域)的高大于滚动视图的高
3、内容视图(滚动区域)的宽和高都大于滚动视图的宽和高
*/
/**
* 如果想实现股东视图的缩放功能,必须指定缩放的视图以及缩放的比例
* 指定所发那个视图需要实现代理方法,指定缩放比例,是为滚动设置缩放比例
*/
// scrollView.minimumZoomScale = 0.5; // 最小缩放比例
// scrollView.maximumZoomScale = 2.0; // 最大缩放比例
scrollView.contentSize = CGSizeMake(7 * kWidth, kHeight);
// 滚动视图偏移量
scrollView.contentOffset = CGPointMake(0, 0);
// 整页滚动
scrollView.pagingEnabled = YES;
// 关闭横向显示条
scrollView.showsHorizontalScrollIndicator = NO;
// 关闭滚动视图的回弹效果(默认是开启的)
scrollView.bounces = NO;
// 设置滚动视图的代理
scrollView.delegate = self;
// for循环创建七个UIImageView并且添加到滚动视图上面
for (int i = 0; i < 7; i++) {
// 先创建小scrollView
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kWidth, kHeight)];
imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg", i]];
UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(i * kWidth, 0, kWidth, kHeight)];
scroll.delegate = self;
scroll.minimumZoomScale = 0.5; // 最小缩放比例
scroll.maximumZoomScale = 2.0; // 最大缩放比例
[scroll addSubview:imageView];
[scrollView addSubview:scroll];
}
[self.view addSubview:scrollView];
如果只用一个UIScrollView来存放所以的图片,那么图片的放大缩小会使UIScrollView不能正常的滚动,所以我们需要先用一个小的UIScrollView来存放图片,然后再把小的UISrollVIew放到大的里面,这样的话,放大缩小图片对大的UIScrollView没有影响了。
我们还需要给UIScrollView添加代理,这样才能完成后续的工作。 <UIScrollViewDelegate>。
// 滚动过程中触发的方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
NSLog(@"正在滚动");
// CGFloat scrollX = scrollView.center.x;
// CGFloat scrollY = scrollView.center.y;
//
// scrollX = scrollView.contentSize.width > scrollView.frame.size.width ? scrollView.contentSize.width / 2 : scrollX;
//
// scrollY = scrollView.contentSize.height > scrollView.frame.size.height ? scrollView.contentSize.height / 2 : scrollY;
//
// UIImageView *image = [scrollView.subviews firstObject];
//
// image.center = CGPointMake(scrollX, scrollY);
}
// 即将开始拖拽的方法,吃屎桂东视图即将加速
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
NSLog(@"即将进行拖拽");
}
// 结束拖拽的方法,不再加速
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
NSLog(@"拖拽结束");
}
// 即将开始减速
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
NSLog(@"即将开始减速");
}
// 结束减速,也就是停止滚动
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
NSLog(@"结束滚动");
// 先从负责滚动的⼤scrollView找到他的⼦视图
for (UIScrollView *sView in scrollView.subviews){
// 在根据⼦类的对象类型进⾏判断
if ([sView isKindOfClass:[UIScrollView class]]){
// 把视图的尺⼨恢复到原有尺⼨
sView.zoomScale = 1.0;
}
}
}
上面便是比较常用的代理方法。接下来就是缩放的方法。
// 指定缩放视图
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return [scrollView.subviews firstObject];
}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
UIImageView *imageView = [scrollView.subviews firstObject];
if (scrollView.zoomScale <= 1.0) {
imageView.center = CGPointMake(kWidth / 2, kHeight / 2);
}
}
这样就完成了一个比较简单的小东西。