什么是UIScrollView
- 移動設(shè)備的屏幕大小是極其有限的拯钻,因此直接展示在用戶眼前的內(nèi)容也相當(dāng)有限
- 當(dāng)展示的內(nèi)容較多,超出一個屏幕時椭员,用戶可通過滾動手勢來查看屏幕以外的內(nèi)容
- 普通的UIView不具備滾動功能,不適合顯示過多的內(nèi)容
- UIScrollView是一個能夠滾動的視圖控件,可以用來展示大量的內(nèi)容撩幽,并且可以通過滾動查看所有的內(nèi)容
- 舉例:手機(jī)上的“設(shè)置”
手機(jī)設(shè)置頁面.png
UIScrollView的基本使用
- UIScrollView的用法很簡單:
- 將需要展示的內(nèi)容添加到UIScrollView中
- 設(shè)置UIScrollView的contentSize屬性,告訴UIScrollView所有內(nèi)容的尺寸箩艺,也就是告訴它滾動的范圍(能滾多遠(yuǎn)窜醉,滾到哪里是盡頭)
UIScrollView的常見屬性
@property(nonatomic)CGPoint contentOffset;
//這個屬性用來表示UIScrollView滾動的位置(其實(shí)就是內(nèi)容左上角與scrollView左上角的間距值)
@property(nonatomic)CGSize contentSize;
//這個屬性用來表示UIScrollView內(nèi)容的尺寸,滾動范圍(能滾多遠(yuǎn))
@property(nonatomic)UIEdgeInsets contentInset;
//這個屬性能夠在UIScrollView的4周增加額外的滾動區(qū)域艺谆,一般用來避免scrollView的內(nèi)容被其他控件擋住
@property(nonatomic)BOOL bounces;
//設(shè)置UIScrollView是否需要彈簧效果
@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
//設(shè)置UIScrollView是否能滾動
@property(nonatomic)BOOL showsHorizontalScrollIndicator;
//是否顯示水平滾動條
@property(nonatomic)BOOL showsVerticalScrollIndicator;
//是否顯示垂直滾動條
UIScrollView無法滾動的解決辦法
- 如果UIScrollView無法滾動榨惰,可能是以下原因:
- 沒有設(shè)置contentSize
- scrollEnabled=NO
- 沒有接收到觸摸事件:userInteractionEnabled=NO
UIScrollView的代理(delegate)
- 很多時候,我們想在UIScrollView正在滾動 或 滾動到某個位置
或者 停止?jié)L動 時做一些特定的操作,要想完成上述功能静汤,前提條件就是能夠監(jiān)聽到UIScrollView的整個滾動過程. - 當(dāng)UIScrollView發(fā)生一系列的滾動操作時琅催,會自動通知它的代理(delegate)對象,給它的代理發(fā)送相應(yīng)的消息虫给,讓代理得知它的滾動情況.
- 也就是說藤抡,要想監(jiān)聽UIScrollView的滾動過程,就必須先給UIScrollView設(shè)置一個代理對象狰右,然后通過代理得知UIScrollView的滾動過程
delegate.png
通過storyboard拖線
通過storyboard拖線.png
UIScrollView和控制器
UIS和控制器.png
UIScrollView的縮放原理
UIScrollView的縮放原理.png
- 當(dāng)用戶在UIScrollView身上使用捏合手勢時杰捂,UIScrollView會給代理發(fā)送一條消息,詢問代理究竟要縮放自己內(nèi)部的哪一個子控件(哪一塊內(nèi)容)
- 當(dāng)用戶在UIScrollView身上使用捏合手勢時棋蚌,UIScrollView會調(diào)用代理的viewForZoomingInScrollView:方法嫁佳,這個方法返回的控件就是需要進(jìn)行縮放的控件
- 縮放實(shí)現(xiàn)步驟
1.設(shè)置UIScrollView的id<UISCrollViewDelegate> delegate代理對象
2.設(shè)置minimumZoomScale:縮小的最小比例
3.設(shè)置maximumZoomScale:放大的最大比例
4.讓代理對象實(shí)現(xiàn)下面的方法,返回需要縮放的視圖控件
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;
跟縮放相關(guān)的其他代理方法,縮放完畢的時候調(diào)用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
正在縮放的時候調(diào)用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
分頁
只要將UIScrollView的pageEnabled屬性設(shè)置為YES谷暮,UIScrollView會被分割成多個獨(dú)立頁面蒿往,里面的內(nèi)容就能進(jìn)行分頁展示
一般會配合UIPageControl增強(qiáng)分頁效果,UIPageControl常用屬性如下:
//一共有多少頁
@property(nonatomic) NSInteger numberOfPages;
//當(dāng)前顯示的頁碼
@property(nonatomic) NSInteger currentPage;
//只有一頁時湿弦,是否需要隱藏頁碼指示器
@property(nonatomic) BOOL hidesForSinglePage;
//其他頁碼指示器的顏色
@property(nonatomic,retain) UIColor *pageIndicatorTintColor;
//當(dāng)前頁碼指示器的顏色
@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;
常見的分頁
常見的分頁png.png