UIScrollView這個(gè)類(也就是滾動(dòng)視圖),可以讓我們展示比window尺寸大的內(nèi)容。用戶可以通過手勢(shì)來實(shí)現(xiàn)視圖的滾動(dòng)和縮放。
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è)置是否可以滾動(dòng)
scrollView.scrollEnabled = YES; // 默認(rèn)為YES
```
設(shè)置是否能夠整頁翻動(dòng)
scrollView.pagingEnabled = YES; // 默認(rèn)為NO。如果為YES,滑動(dòng)會(huì)停止在視圖邊界長度的倍數(shù)上。
```
######設(shè)置偏移量contentOffset
CGPoint類型,默認(rèn)為CGPointZero
scrollView.contentOffset = CGPointMake(314, 200);
```
設(shè)置是否能點(diǎn)擊狀態(tài)欄滾動(dòng)到頂部
默認(rèn)為 YES。點(diǎn)擊狀態(tài)欄時(shí), 如果屏幕上只有一個(gè)scrollsToTop屬性為YES的scrollView, 而且其代理的shouldScrollViewScrollToTop方法不返回NO, 那么這個(gè)scrollView會(huì)滾動(dòng)到頂部
//scrollView.scrollsToTop = NO;
設(shè)置是否顯示滾動(dòng)條
//顯示水平方向的滾動(dòng)條(默認(rèn)YES)
scrollView.showsHorizontalScrollIndicator = NO;
//顯示垂直方向的滾動(dòng)條(默認(rèn)YES)
scrollView.showsVerticalScrollIndicator = NO;
```
#####設(shè)置是否反彈
scrollView.bounces = NO; // 默認(rèn)為YES。如果該屬性為YES,視圖滾動(dòng)時(shí)可以越過邊界,越過邊界后會(huì)被彈回。
如果bounces設(shè)為NO,以下兩個(gè)屬性不論是不是YES都不會(huì)奏效:
//控制滾動(dòng)視圖遇到垂直方向是否反彈
scrollView.alwaysBounceVertical = YES;// 默認(rèn)為NO
//如果該屬性和bounces同時(shí)為YES,那么即使contentSize的height小于frame的height,豎直方向的拖拽也是允許的。
//控制滾動(dòng)視圖遇到水平方向是否反彈
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í)候是否會(huì)反彈
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
######滾動(dòng)視圖經(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后,滾動(dòng)視圖顯示相應(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,則什么都不會(huì)被觸發(fā)。例:
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
return scrollView.subviews[0];
}
###以下的四個(gè)代理方法在拖拽過程中會(huì)依次被觸發(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;
}