UIScrollView這個(gè)類(也就是滾動視圖)谚中,可以讓我們展示比window尺寸大的內(nèi)容缕碎。用戶可以通過手勢來實(shí)現(xiàn)視圖的滾動和縮放侥啤。
UIScrollView繼承于UIView殴胧,是UITableView和UITextView等UIKit類的父類荚坞。
基本用法
//創(chuàng)建
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(50, 50, 314, 500)];
//設(shè)置背景顏色
scrollView.backgroundColor = [UIColor redColor];
```
#####設(shè)置contentSize,這是UIScrollView的內(nèi)容視圖的尺寸今妄,通常contentSize大于UIScrollView的frame
scrollView.contentSize = CGSizeMake(314*3, 500); //非常重要
######設(shè)置是否可以滾動
scrollView.scrollEnabled = YES; // 默認(rèn)為YES
```
設(shè)置是否能夠整頁翻動
scrollView.pagingEnabled = YES; // 默認(rèn)為NO郑口。如果為YES,滑動會停止在視圖邊界長度的倍數(shù)上盾鳞。
```
######設(shè)置偏移量contentOffset
CGPoint類型犬性,默認(rèn)為CGPointZero
scrollView.contentOffset = CGPointMake(314, 200);
```
設(shè)置是否能點(diǎn)擊狀態(tài)欄滾動到頂部
默認(rèn)為 YES。點(diǎn)擊狀態(tài)欄時(shí), 如果屏幕上只有一個(gè)scrollsToTop屬性為YES的scrollView, 而且其代理的shouldScrollViewScrollToTop方法不返回NO, 那么這個(gè)scrollView會滾動到頂部
//scrollView.scrollsToTop = NO;
設(shè)置是否顯示滾動條
//顯示水平方向的滾動條(默認(rèn)YES)
scrollView.showsHorizontalScrollIndicator = NO;
//顯示垂直方向的滾動條(默認(rèn)YES)
scrollView.showsVerticalScrollIndicator = NO;
```
#####設(shè)置是否反彈
scrollView.bounces = NO; // 默認(rèn)為YES腾仅。如果該屬性為YES乒裆,視圖滾動時(shí)可以越過邊界,越過邊界后會被彈回推励。
如果bounces設(shè)為NO鹤耍,以下兩個(gè)屬性不論是不是YES都不會奏效:
//控制滾動視圖遇到垂直方向是否反彈
scrollView.alwaysBounceVertical = YES;// 默認(rèn)為NO
//如果該屬性和bounces同時(shí)為YES,那么即使contentSize的height小于frame的height验辞,豎直方向的拖拽也是允許的稿黄。
//控制滾動視圖遇到水平方向是否反彈
scrollView.alwaysBounceHorizontal = YES;//默認(rèn)為NO
//如果該屬性和bounces同時(shí)為YES,那么即使contentSize的width小于frame的width跌造,水平方向的拖拽也是允許的杆怕。
##縮放功能
//設(shè)置最小縮放比例
scrollView.minimumZoomScale = 0.5; //(此處設(shè)置的大小最小變?yōu)樵瓉淼?.5*0.5倍)
//設(shè)置最大縮放比例
scrollView.maximumZoomScale = 2; //類型是CGFloat
//zoomScale // default is 1.0
//設(shè)置代理(若要實(shí)現(xiàn)縮放功能必須實(shí)現(xiàn)代理方法)
scrollView.delegate = self;
//縮放的時(shí)候是否會反彈
scrollView.bouncesZoom = YES; // default is YES.
//獲取縮放狀態(tài)(只讀)
NSLog(@"%d",scrollView.zooming); // zooming: returns YES if user in zoom gesture
//3 添加視圖
[self.view addSubview:scrollView];
UIImageView * imgView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"dani.jpg"]];
//注意UIImageView
imgView.frame = CGRectMake(0, 0, 314, 500);
[scrollView addSubview:imgView]; //addSubview相當(dāng)于往數(shù)組里加元素!
UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(314, 0, 314, 200)];
aView.backgroundColor = [UIColor yellowColor];
[scrollView addSubview:aView];
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"2"]];
#UIPageControl
######滾動視圖經(jīng)常與UIPageControl一起使用壳贪。
######UIPageControl繼承于UIControl陵珍。
先添加兩個(gè)屬性
@property(nonatomic,strong)UIScrollView *scrollView;
@property(nonatomic,retain)UIPageControl *pageControl;
######UIPageControl的使用:
//創(chuàng)建
UIPageControl * pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(50, 600, 314, 34)];
//背景顏色
pageControl.backgroundColor = [UIColor blackColor];
//總頁數(shù)
pageControl.numberOfPages = 3; //NSInteger類型
//當(dāng)前第幾頁(范圍是 0 ~ (numberOfPages - 1))
pageControl.currentPage = 0; //NSInteger類型
//只有一頁的時(shí)候隱藏
pageControl.hidesForSinglePage = YES;//默認(rèn)為NO
//設(shè)置當(dāng)前頁指示器的顏色
pageControl.currentPageIndicatorTintColor = [UIColor redColor];
//設(shè)置指示器的顏色
pageControl.pageIndicatorTintColor = [UIColor whiteColor];
//添加點(diǎn)擊事件
[pageControl addTarget:self action:@selector(pageClick:) forControlEvents:UIControlEventValueChanged];
//設(shè)為屬性
self.scrollView = scrollView;
self.pageControl = pageControl;
//3 添加到視圖
[self.view addSubview:pageControl];
##UIPageControl點(diǎn)擊事件
點(diǎn)擊UIPageControl后,滾動視圖顯示相應(yīng)頁面
-(void)pageClick:(UIPageControl *)sender{
//1 獲取當(dāng)前顯示第幾頁
NSInteger currentPage = sender.currentPage;
//2 設(shè)置scrollView的偏移量
self.scrollView.contentOffset = CGPointMake(314 * currentPage, 0);
}
#UIScrollViewDelegate
######如果想實(shí)現(xiàn)縮放违施,就必須實(shí)現(xiàn)viewForZoomingInScrollView這個(gè)代理方法互纯,返回要進(jìn)行縮放的視圖。如果返回nil醉拓,則什么都不會被觸發(fā)伟姐。例:
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
return scrollView.subviews[0];
}
###以下的四個(gè)代理方法在拖拽過程中會依次被觸發(fā):
######即將開始拖拽
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
}
######停止拖拽時(shí)觸發(fā)
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
}
######即將進(jìn)行減速
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
}```
減速結(jié)束
減速結(jié)束時(shí),我們可以通過contentOffset判斷當(dāng)前在那一頁亿卤,進(jìn)而改變pageControl的currentPage屬性愤兵。
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
//獲取偏移量
NSInteger currentPage = scrollView.contentOffset.x/314;
//改變pageControl的顯示
self.pageControl.currentPage = currentPage;
}