UIScrollView可以用于显示多于一个屏幕的内容,超出屏幕范围的内容可以通过滑动进行查看,附上轮播图的传送门http://www.cnblogs.com/shensq/p/5152954.html。
我们来试着做一个简单的,首先我们可以用宏定义来保存屏幕的高度跟宽度。
// 定义保存屏幕宽度和高度的宏 #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); } }
这样就完成了一个比较简单的小东西。