一、UIScrollView的概念
UIScrollView是一个能够滚动的试图控件,能够滑动的视图,都是继承于UIScrollView,而UIScrollView继承于UIView
UIScrollView的子类:UITableView、UITextView、UICollectionView
二、UIScrollView的概念
contentSize 能够让视图显示更多的内容,contSize就是UIScrollView实际内容大小.如果contentSize的尺寸比ScrollView小,或者相等,则ScrollView不能滑动
contentOffset平移量,能够直接定位到你想看的内容
contentInset 给ScrollView四周增加额外的滚动区域,内容的内边框
showsHorizontalScrollIndicator 是否设置水平滚动条
showsVerticalScrollIndicator 是否设置垂直滚动条
bounces 是否设置回滚效果
scrollEnabled 是否滚动
indicatorStyle 设置滚动条样式
pagingEnabled 设置滚动分页
maximumZoomScale图片最多能放大多少倍(要放大、缩小得挂上代理)
minimumZoomScale图片最多能缩小多少倍
decelerationRate减速速率
*设置不包含导航栏解决全屏滚动视图上面导航栏处无图片的问题,图片从导航栏一下开始定位计算,这个以后做项目总会有必要记得
self.edgesForExtendedLayout=UIRectEdgeNone;
设置滚动视图方向垂直
scrollView.direction=Vertical;
delegate 代理
三、UIScrollView的代理方法(放大、缩小、拖拽)
已经滚动时调用
- (void)scrollViewDidScroll:(UIScrollView*)scrollView;
已经缩放
- (void)scrollViewDidZoom:(UIScrollView *)scrollView;
开始拖拽
- (void)scrollViewWillBeginDragging:(UIScrollView*)scrollView;
将要拖拽结束获得降速的速率和偏移量
- (void)scrollViewWillEndDragging:(UIScrollView*)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inoutCGPoint *)targetContentOffset;
拖拽结束将要降速
- (void)scrollViewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)decelerate;
开始降速
- (void)scrollViewWillBeginDecelerating:(UIScrollView*)scrollView
结束降速
- (void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView
滚动动画将要消失
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView*)scrollView
设置缩放视图
- (nullableUIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView
开始缩放
- (void)scrollViewWillBeginZooming:(UIScrollView*)scrollView withView:(nullableUIView*)view
结束缩放以及缩放的比例
- (void)scrollViewDidEndZooming:(UIScrollView*)scrollView withView:(nullableUIView*)view atScale:(CGFloat)scale;
是否可以滚动到顶部设置YES可以
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView*)scrollView
移动到顶部调用
- (void)scrollViewDidScrollToTop:(UIScrollView*)scrollView;
下面一个demo来展示下
#import "ViewController.h"
@interface FirstLoginViewController ()<UIScrollViewDelegate>
{
UIScrollView *theScroll;
NSArray *arr;
UIPageControl *thePage;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
theScroll = [[UIScrollView alloc]initWithFrame:self.view.frame];
theScroll.delegate = self;
[self.view addSubview:theScroll];
theScroll.pagingEnabled = YES;
arr = @[@"1.JPG",@"2.JPG",@"3.JPG"];
theScroll.contentSize = CGSizeMake(self.view.frame.size.width*arr.count, self.view.frame.size.width);
for (int i = 0; i<arr.count; i++)
{
UIImageView *theImg = [[UIImageView alloc]initWithFrame:CGRectMake(theScroll.frame.size.width * i, 0, self.view.frame.size.width, self.view.frame.size.height)];
theImg.userInteractionEnabled = YES;
theImg.image = [UIImage imageNamed:arr[i]];
if (i == arr.count-1)
{
UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake((self.view.frame.size.width-100)/2, 550, 100, 40)];
[btn setTitle:@"立即体验" forState:UIControlStateNormal];
[btn setBackgroundColor:[UIColor blackColor]];
[btn addTarget:self action:@selector(click) forControlEvents:UIControlEventTouchUpInside];
btn.layer.cornerRadius = 10;
btn.layer.masksToBounds = YES;
[theImg addSubview:btn];
}
[theScroll addSubview:theImg];
}
//创建页面控制器
thePage = [[UIPageControl alloc]initWithFrame:CGRectMake((self.view.frame.size.width-100)/2, 600, 100, 30)];
thePage.numberOfPages = arr.count;
thePage.currentPage = 0;
[self.view addSubview:thePage];
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSInteger index = theScroll.contentOffset.x / theScroll.frame.size.width;
thepage.currentPage = index;
}