一、UIScrollView是什麼? 1、UIScrollView是滾動的view,UIView本身不能滾動,子類UIScrollview拓展了滾動方面的功能。 2、UIScrollView是所有滾動視圖的基類。以後的UITableView,UITextView等視圖都是繼承於該類。 使用場景:顯示 ...
一、UIScrollView是什麼?
1、UIScrollView是滾動的view,UIView本身不能滾動,子類UIScrollview拓展了滾動方面的功能。
2、UIScrollView是所有滾動視圖的基類。以後的UITableView,UITextView等視圖都是繼承於該類。
使用場景:顯示不下(單張大圖);內容太多(圖文混排);滾動頭條(圖片);相冊等
二、UIScrollView使用
1、UIScrollview主要專長於兩個方面:
a、滾動:contentSize大於frame.size的時候,能夠滾動。
b、 縮放:自帶縮放,可以指定縮放倍數。
2、UIScrollView滾動相關屬性contentSize
//定義內容區域大小,決定是否能夠滑動 contentOffset //視圖左上角距離坐標原點的偏移量 scrollsToTop //滑動到頂部(點狀態條的時候) pagingEnabled //是否整屏翻動 bounces //邊界是否回彈 scrollEnabled //是否能夠滾動 showsHorizontalScrollIndicator //控制是否顯示水平方向的滾動條 showVerticalScrollIndicator //控制是否顯示垂直方向的滾動條 alwaysBounceVertical //控制垂直方向遇到邊框是否反彈 alwaysBounceHorizontal //控制水平方向遇到邊框是否反彈
3、UIScrollView縮放相關屬性
minimumZoomScale // 縮小的最小比例 maximumZoomScale //放大的最大比例 zoomScale //設置變化比例 zooming //判斷是否正在進行縮放反彈 bouncesZoom //控制縮放的時候是否會反彈 要實現縮放,還需要實現delegate,指定縮放的視圖是誰。
4.UIScrollView滾動實例應用
- (void)scrollView{ // 創建滾動視圖,但我們現實的屏幕超過一屏時,就需要滾動視圖 UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame]; scrollView.backgroundColor = [UIColor yellowColor]; scrollView.tag = 1000; // 設置滾動區域 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; // (記得導入協議代理 <UIScrollViewAccessibilityDelegate>) }
5、UIScrollView滾動代理方法
// 滾動就會觸發 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"只有scrollview是跟滾動狀態就會調用此方法"); } //開始拖拽時觸發 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ NSLog(@"開始拖拽"); } // 結束拖拽時觸發 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ NSLog(@"結束拖拽"); } // 開始減速時觸發 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ NSLog(@"開始減速"); } // 結束減速時觸發(停止) - (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; // 這裡我們規定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); } // 正在縮放的代理方法 只要在縮放就執行該方法,所以此方法會在縮放過程中多次調用 - (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)); } // 縮放結束所執行的代理方法 /** * @ view 當前正在縮放的視圖 * @ scale 當前正在縮放視圖的縮放比例 */ - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{ // 縮放完成之後恢複原大小,這裡運用到2D仿射變換函數中與捏合有關的函數 view.transform =CGAffineTransformMakeScale(1, 1); }