一、UIScrollView是什么乓旗?
1、UIScrollView是滾動(dòng)的view集索,UIView本身不能滾動(dòng)屿愚,子類(lèi)UIScrollview拓展了滾動(dòng)方面的功能。
2务荆、UIScrollView是所有滾動(dòng)視圖的基類(lèi)妆距。以后的UITableView,UITextView等視圖都是繼承于該類(lèi)函匕。
使用場(chǎng)景:顯示不下(單張大圖)娱据;內(nèi)容太多(圖文混排);滾動(dòng)頭條(圖片)盅惜;相冊(cè)等
二中剩、UIScrollView使用
1、UIScrollview主要專(zhuān)長(zhǎng)于兩個(gè)方面:
a酷窥、滾動(dòng):contentSize大于frame.size的時(shí)候咽安,能夠滾動(dòng)。
b蓬推、 縮放:自帶縮放妆棒,可以指定縮放倍數(shù)。
2、UIScrollView滾動(dòng)相關(guān)屬性contentSize
//定義內(nèi)容區(qū)域大小糕珊,決定是否能夠滑動(dòng)
contentOffset //視圖左上角距離坐標(biāo)原點(diǎn)的偏移量
scrollsToTop //滑動(dòng)到頂部(點(diǎn)狀態(tài)條的時(shí)候)
pagingEnabled //是否整屏翻動(dòng)
bounces //邊界是否回彈
scrollEnabled //是否能夠滾動(dòng)
showsHorizontalScrollIndicator //控制是否顯示水平方向的滾動(dòng)條
showVerticalScrollIndicator //控制是否顯示垂直方向的滾動(dòng)條
alwaysBounceVertical //控制垂直方向遇到邊框是否反彈
alwaysBounceHorizontal //控制水平方向遇到邊框是否反彈
3动分、UIScrollView縮放相關(guān)屬性
minimumZoomScale // 縮小的最小比例
maximumZoomScale //放大的最大比例
zoomScale //設(shè)置變化比例
zooming //判斷是否正在進(jìn)行縮放反彈
bouncesZoom //控制縮放的時(shí)候是否會(huì)反彈
要實(shí)現(xiàn)縮放,還需要實(shí)現(xiàn)delegate红选,指定縮放的視圖是誰(shuí)澜公。
4.UIScrollView滾動(dòng)實(shí)例應(yīng)用
- (void)scrollView{
// 創(chuàng)建滾動(dòng)視圖,但我們現(xiàn)實(shí)的屏幕超過(guò)一屏?xí)r,就需要滾動(dòng)視圖
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
scrollView.backgroundColor = [UIColor yellowColor];
scrollView.tag = 1000;
// 設(shè)置滾動(dòng)區(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個(gè)視圖",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];
}
// 設(shè)置分頁(yè)效果 (默認(rèn)值為NO)
scrollView.pagingEnabled = YES;
// 設(shè)置滾動(dòng)條是否顯示(默認(rèn)值是YES)
scrollView.showsHorizontalScrollIndicator = YES;
// 設(shè)置邊界是否有反彈效果(默認(rèn)值是YES)
scrollView.bounces = YES;
// 設(shè)置滾動(dòng)條的樣式
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
/*
indicatorStyle(枚舉值)
UIScrollViewIndicatorStyleDefault, //白色
UIScrollViewIndicatorStyleBlack, // 黑色
*/
// 設(shè)置scrollView的代理
scrollView.delegate = self; // (記得導(dǎo)入?yún)f(xié)議代理 <UIScrollViewAccessibilityDelegate>)
}
5喇肋、UIScrollView滾動(dòng)代理方法
// 滾動(dòng)就會(huì)觸發(fā)
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{ NSLog(@"只有scrollview是跟滾動(dòng)狀態(tài)就會(huì)調(diào)用此方法");
}
//開(kāi)始拖拽時(shí)觸發(fā)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
NSLog(@"開(kāi)始拖拽");
}
// 結(jié)束拖拽時(shí)觸發(fā)
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSLog(@"結(jié)束拖拽");
}
// 開(kāi)始減速時(shí)觸發(fā)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
NSLog(@"開(kāi)始減速");
}
// 結(jié)束減速時(shí)觸發(fā)(停止)
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSLog(@"結(jié)束減速(停止)");
}
6坟乾、UIScrollView縮放實(shí)例應(yīng)用
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor orangeColor];
// 初始化一個(gè)scrollView
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
scrollView.backgroundColor = [UIColor greenColor];
scrollView.delegate = self;
// 設(shè)置縮放比率
// 設(shè)置可縮小道德最小比例
scrollView.minimumZoomScale = 0.5;
// 設(shè)置可放大的最大比例
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,根據(jù)此寬度得到等比例的高度
float imageViewWidth = 200;
float imageViewHeight = 200 *imageHeight/imageWidth;
// 初始化一個(gè)UIimageview
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, imageViewWidth, imageViewHeight)];
// 為imageView設(shè)置圖片
imageView.image = myImage;
// 讓imageView居中
imageView.center = self.view.center;
imageView.tag = 1000;
[scrollView addSubview:imageView];
}
7蝶防、UIScrollView縮放有關(guān)的代理
#pragma mark -- 滾動(dòng)視圖與縮放有關(guān)的代理方法
//指定scrollview的某一個(gè)子視圖為可縮放視圖甚侣,前提條件是次視圖已經(jīng)添加到scrollview上面
-(UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView{
UIView *imageView = (UIView*)[scrollView viewWithTag:1000];
return imageView;
}
// 開(kāi)始縮放的代理方法 第二個(gè)參數(shù)view:這個(gè)參數(shù)使我們將要縮放的視圖(這里就是imageView)
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{
NSLog(@"%@",view);
}
// 正在縮放的代理方法 只要在縮放就執(zhí)行該方法,所以此方法會(huì)在縮放過(guò)程中多次調(diào)用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView{
// 在縮放過(guò)程中為了使得該視圖一直在屏幕中間间学,所以我們需要在他縮放的過(guò)程中一直調(diào)整他的center
// 得到scrollview的子視圖
UIImageView *imageView = (UIImageView *)[scrollView viewWithTag:1000];
// 打印imageView的frame殷费,分析為什么他的位置會(huì)改變
// NSLog(@"frame -- %@",NSStringFromCGRect(imageView.frame));
// 設(shè)置imageview的center,是他的位置一直在屏幕中央
imageView.center = scrollView.center;
// 打印contentSize 分析為什么縮放之后會(huì)滑動(dòng)
NSLog(@"contentSize %@",NSStringFromCGSize(scrollView.contentSize));
}
// 縮放結(jié)束所執(zhí)行的代理方法
/**
* @ view 當(dāng)前正在縮放的視圖
* @ scale 當(dāng)前正在縮放視圖的縮放比例
*/
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{
// 縮放完成之后恢復(fù)原大小低葫,這里運(yùn)用到2D仿射變換函數(shù)中與捏合有關(guān)的函數(shù)
view.transform =CGAffineTransformMakeScale(1, 1);
}
8详羡、成品 (可以左右滑動(dòng)切換圖片)
這是第0個(gè)視圖.png
這是第2個(gè)視圖.png