一、UIScrollView是什么?
1、UIScrollView是滾動的view,UIView本身不能滾動,子類UIScrollview拓展了滾動方面的功能。
2、UIScrollView是所有滾動視圖的基類。以后的UITableView,UITextView等視圖都是繼承于該類。
使用場景:顯示不下(單張大圖);內容太多(圖文混排);滾動頭條(圖片);相冊等
二、UIScrollView使用
1、UIScrollview主要專長于兩個方面:
a、滾動:contentSize大于frame.size的時候,能夠滾動。
b、 縮放:自帶縮放,可以指定縮放倍數。
2、UIScrollView滾動相關屬性contentSize
//定義內容區(qū)域大小,決定是否能夠滑動
contentOffset //視圖左上角距離坐標原點的偏移量
scrollsToTop //滑動到頂部(點狀態(tài)條的時候)
pagingEnabled //是否整屏翻動
bounces //邊界是否回彈
scrollEnabled //是否能夠滾動
showsHorizontalScrollIndicator //控制是否顯示水平方向的滾動條
showVerticalScrollIndicator //控制是否顯示垂直方向的滾動條
alwaysBounceVertical //控制垂直方向遇到邊框是否反彈
alwaysBounceHorizontal //控制水平方向遇到邊框是否反彈
3、UIScrollView縮放相關屬性
minimumZoomScale // 縮小的最小比例
maximumZoomScale //放大的最大比例
zoomScale //設置變化比例
zooming //判斷是否正在進行縮放反彈
bouncesZoom //控制縮放的時候是否會反彈
要實現縮放,還需要實現delegate,指定縮放的視圖是誰。
4.UIScrollView滾動實例應用
- (void)scrollView{
// 創(chuàng)建滾動視圖,但我們現實的屏幕超過一屏時,就需要滾動視圖
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
scrollView.backgroundColor = [UIColor yellowColor];
scrollView.tag = 1000;
// 設置滾動區(qū)域
scrollView.contentSize = CGSizeMake(4 * CGRectGetWidth(self.view.frame), self.view.frame.size.height);
[self.view addSubview:scrollView];
// 添加子視圖
for (int i = 0; i < 4; i ++) {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.view.frame) * i, 0, CGRectGetWidth(self.view.frame), CGRectGetHeight(self.view.frame))];
label.text = [NSString stringWithFormat:@"這是%d個視圖",i];
label.font = [UIFont systemFontOfSize:30];
[scrollView addSubview:label];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[NSString stringWithFormat:@"%d.jpg",i]]]; // (有四張片分別取名0.jpg,1.jpg,2.jpg.3.jpg)
[imageView setFrame:self.view.frame];
[label addSubview:imageView];
// label.backgroundColor = [UIColor colorWithRed:arc4random()%256/255.0 green:
// arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];
}
// 設置分頁效果 (默認值為NO)
scrollView.pagingEnabled = YES;
// 設置滾動條是否顯示(默認值是YES)
scrollView.showsHorizontalScrollIndicator = YES;
// 設置邊界是否有反彈效果(默認值是YES)
scrollView.bounces = YES;
// 設置滾動條的樣式
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
/*
indicatorStyle(枚舉值)
UIScrollViewIndicatorStyleDefault, //白色
UIScrollViewIndicatorStyleBlack, // 黑色
*/
// 設置scrollView的代理
scrollView.delegate = self; // (記得導入協(xié)議代理 <UIScrollViewAccessibilityDelegate>)
}
5、UIScrollView滾動代理方法
// 滾動就會觸發(fā)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{ NSLog(@"只有scrollview是跟滾動狀態(tài)就會調用此方法");
}
//開始拖拽時觸發(fā)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
NSLog(@"開始拖拽");
}
// 結束拖拽時觸發(fā)
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSLog(@"結束拖拽");
}
// 開始減速時觸發(fā)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
NSLog(@"開始減速");
}
// 結束減速時觸發(fā)(停止)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSLog(@"結束減速(停止)");
}
6、UIScrollView縮放實例應用
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor orangeColor];
// 初始化一個scrollView
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
scrollView.backgroundColor = [UIColor greenColor];
scrollView.delegate = self;
// 設置縮放比率
// 設置可縮小道德最小比例
scrollView.minimumZoomScale = 0.5;
// 設置可放大的最大比例
scrollView.maximumZoomScale = 2.0;
[self.view addSubview:scrollView];
// 使得要添加的圖片寬高成比例
UIImage *myImage = [UIImage imageNamed:@"7.jpg"];
// 得到原始寬高
float imageWidth = myImage.size.width;
float imageHeight = myImage.size.height;
// 這里我們規(guī)定imageView的寬為200,根據此寬度得到等比例的高度
float imageViewWidth = 200;
float imageViewHeight = 200 *imageHeight/imageWidth;
// 初始化一個UIimageview
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, imageViewWidth, imageViewHeight)];
// 為imageView設置圖片
imageView.image = myImage;
// 讓imageView居中
imageView.center = self.view.center;
imageView.tag = 1000;
[scrollView addSubview:imageView];
}
7、UIScrollView縮放有關的代理
#pragma mark -- 滾動視圖與縮放有關的代理方法
//指定scrollview的某一個子視圖為可縮放視圖,前提條件是次視圖已經添加到scrollview上面
-(UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView{
UIView *imageView = (UIView*)[scrollView viewWithTag:1000];
return imageView;
}
// 開始縮放的代理方法 第二個參數view:這個參數使我們將要縮放的視圖(這里就是imageView)
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{
NSLog(@"%@",view);
}
// 正在縮放的代理方法 只要在縮放就執(zhí)行該方法,所以此方法會在縮放過程中多次調用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
// 在縮放過程中為了使得該視圖一直在屏幕中間,所以我們需要在他縮放的過程中一直調整他的center
// 得到scrollview的子視圖
UIImageView *imageView = (UIImageView *)[scrollView viewWithTag:1000];
// 打印imageView的frame,分析為什么他的位置會改變
// NSLog(@"frame -- %@",NSStringFromCGRect(imageView.frame));
// 設置imageview的center,是他的位置一直在屏幕中央
imageView.center = scrollView.center;
// 打印contentSize 分析為什么縮放之后會滑動
NSLog(@"contentSize %@",NSStringFromCGSize(scrollView.contentSize));
}
// 縮放結束所執(zhí)行的代理方法
/**
* @ view 當前正在縮放的視圖
* @ scale 當前正在縮放視圖的縮放比例
*/
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{
// 縮放完成之后恢復原大小,這里運用到2D仿射變換函數中與捏合有關的函數
view.transform =CGAffineTransformMakeScale(1, 1);
}
8、成品 (可以左右滑動切換圖片)

這是第0個視圖.png

這是第2個視圖.png