UIScrollView滚动视图
一 滚动视图
//创建对象
UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0,0,375,667)];
//滚动视图的背景颜色
scrollView。backgroundColor =
//设置内容区域
//非常重要是一个属性决定滚动视图是垂直滑动还是水平滑动
scrollView。contentSize = CGSizeMake(375 * 3, 667);//水平滑动,内容区域为三个屏幕的宽
//设置偏移量,决定了一上来显示的是哪一张图,是非常重要的属性 我们之后学习的循环滚动全部是根据这一属性
scrollVIew。contentOffset = CGPointMake(0,0);
//设置是否整屏翻动(以视图的宽为基准)
//默认为NO
scrollView。pagingEnabled = YES;
//设置边界是否回弹
//默认的是YES 设置成NO之后 第一张手势向右滑不动 最后一张手势向左滑不动
scrollView。bounces = NO;
//如果设置成垂直滑动的时候 点击状态栏 会回到顶部是系统自带的属性默认是YES 滚动视图必须是垂直滚动
scrollView。scrollsToTop = YES;
//设置水平滚动条是否显示 默认是YES
scrollView。showsHorizontalScrollIndicator = NO;
//设置垂直滚动条是否显示
scrollView。showsVerticalScrollIndicator = NO;
//设置代理--UIScrollViewDelegate
scrollView。delegate = self;
//设置最小缩放比例
scrollView。minimumZoomScale = 0.5;
//设置最大放大比例
scrollView。maximumZoomScale = 2;
//将滚动视图添加到根视图上
二 在UIScrollView上循环创建三张imageView
for (int i= 0;i < 3; i ++){
//先创建三张小的scrollView 每个上面添加一张imageVIew,用于每张图片都可以实现放大和缩小
UIScrollView *smallScrollView = [UIScrollView alloc]initWithFrame:CGRectMake(375 * i ,0,375, 667)];
//设置代理
smallScrollView。delegate = self;
//scrollview 自带放大缩小功能
//设置最小缩放比例,最大缩放比例
[scrollView addSubview:smallScrollView];
//设置循环imageView
NSString *imageName = [NSString stringWithFormat:@“%d。png”,i + 1];//图片名称
UIImageView *imageView = [UIImageView alloc]initWithImage:[UIImage imageNamed:imageName];
imageView。frame =
[smallScrollView addSubview:imageView];
}
三 UIPageControl ----分页视图
UIPageControl *page = []
//page 的背景颜色
page,backgroundColor = [UIColor brownColor];//棕色
//设置有几个分页
page。numberOfPages = 3;
//设置当前小圆点的颜色
page。currentPageIndicatorTintColor = [];
//设置非当前小圆点的颜色
page。pageIndicatorTintColor =
//设置当前页(重要属性)
//一定要用在设置分页之后
page。currentPage = 0;//页码是从0开始数的
//添加事件
//pageControl 都是和scrollView结合使用的
//page 的当前页要和scrollView 偏移量对应上
[page addTarget:self action:@selector(pageAction:)forControlEvents:UIControlEventValueChanged];
[self.view addSubview:page];
#pragma mark --- pageControl触发事件 ---
- (void)pageAction:(UIPageControl *)page
{
// NSLog(@"娃哈哈");
// 取出大S 根据page的当前页 改变大S的偏移量
UIScrollView *bigScrollView = self.view.subviews[0];
// NSLog(@"%ld", page.currentPage);
// 偏移量X值 = 当前页 * 视图的宽
bigScrollView.contentOffset = CGPointMake(page.currentPage * 375, 0);
// 添加滑动 图片动画效果
//[bigScrollView setContentOffset:CGPointMake(page.currentPage * 375, 0) animated:YES];
}
#pragma mark --- 允许哪个视图可以进行缩放 ---
// 我们放大缩小的一般情况下 是一张图片
// 我们要将大的scrollView上面 放小的scrollView 然后在每一个小的scrollView上面放一张图片 这样 每一张图片都可以进行缩放
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return scrollView.subviews[0];//缩放的是小的滚动视图,小的滚动视图缩放后对应多imageView也缩放
}
#pragma mark --- 进行缩放会被触发的方法(根据中心点进行缩放)--
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
// NSLog(@"进行缩放");
// 取出小scrollView的imageView,方法中的scrollView就是小的,只有小的才进行缩放,然后下面取的也是小的子视图
// 缩小的情况下才根据中心点缩小
// 放大的情况下 不需要根据中心店放大
if(scrollView.zoomScale <= 1)
{
UIImageView *imageView = scrollView.subviews[0];
imageView.center = CGPointMake(scrollView.frame.size.width / 2, scrollView.frame.size.height / 2);
}
// 代理方法的执行顺序
// 开始拖拽 -> 滚动 -> 结束拖拽 -> 开始减速 -> 滚动 -> 结束减速
#pragma mark --- 开始滚动会触发的方法 ---
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// NSLog(@"开始滚动");
}
#pragma mark --- 开始拖拽会触发的方法 ---
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
// NSLog(@"开始拖拽");
}
#pragma mark --- 结束拖拽会触发的方法----
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
// NSLog(@"结束拖拽");
}
#pragma mark --- 开始减速 ---
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
// NSLog(@"开始减速");
}
#pragma mark --- 结束减速 ----
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
// NSLog(@"结束减速");
// // 取出page 根据scroll的X 改变当前页
// UIPageControl *page = self.view.subviews[1];
// // 当前页 = 大s的偏移量X值 / 视图的宽
// page.currentPage = scrollView.contentOffset.x / 375;
// UIScrollView *bigScrollView = self.view.subviews[0];
// if(![bigScrollView isEqual:scrollView])
// {
// return;
// }
UIPageControl *page = self.view.subviews[1];
page.backgroundColor = [UIColor redColor];
for (UIScrollView *smallScrollView in scrollView.subviews)
{
if (page.currentPage != scrollView.contentOffset.x / 375)
{
smallScrollView.zoomScale = 1;
}
}
page.currentPage = scrollView.contentOffset.x / 375;
// 大S和小S 都设置了代理 当我们把视图缩小的时候 传进来的参数是我们的大S 此时大S 装的是小S 所以能够调用zoomScale 方法
// 当我们把视图放大的时候 小S的内容 会被撑大 那么滚动就是小S 传进来的参数 也是
/*
UIScrollView *bigScrollView = self.view.subviews[0];
if(![bigScrollView isEqual:scrollView])
{
return;
}
for (UIScrollView *smallScrollView in scrollView.subviews)
{
smallScrollView.zoomScale = 1;
}
*/
}