繼承自UIView,自帶2個(gè)子控件:橫、縱滾動(dòng)條(不要通過索引來范圍子控件!如果非要如此,可以先隱藏滾動(dòng)條)但是另外:通過代碼創(chuàng)建,一開始這兩個(gè)子控件為nil。
用法:
將需要展示的內(nèi)容(子控件)添加到其中即可。調(diào)用addSubviews
方法添加。
屬性:
- 可視范圍:即scrollview自身的長(zhǎng),寬。滾動(dòng)時(shí),動(dòng)的是內(nèi)容,而非scrollview
-
scrollEnabled
:滾動(dòng)使能 -
contentSize
:滾動(dòng)范圍(寬,高),必須設(shè)置,且設(shè)定值要大于可視范圍,才能滾動(dòng)。contentSize = CGSizeMake(w,h);
-
showHorizionIndicator、showVerticalIndicator
:是否有滾動(dòng)條(水平、垂直) -
bounces:YES/NO;
:彈性效果 -
alwaysBouncesVertical ;
:永遠(yuǎn)支持彈性效果 alwaysBounceHorizonal:YES/NO
-
alwaysBounceVertical:YES、NO,
下拉彈性效果,常用于初始刷新 -
contentOffset:=CGPointMake(x,y);
內(nèi)容偏移量。控制內(nèi)容的顯示位置。x,y為左上角坐標(biāo)。這個(gè)屬性非常重要,許多滾動(dòng)功能效果的實(shí)現(xiàn),其實(shí)就是改變或調(diào)整這個(gè)偏移量。往往結(jié)合以下方法實(shí)現(xiàn)翻頁(yè)
[self.myScrollView setContentOffset:CGPointMake(page * self.myScrollView.frame.size.width, 0) animated:YES];
-
contentInset
:內(nèi)邊距,包括上左下右。作用,當(dāng)滾到盡頭時(shí),還可以再有一段額外花邊,如下
self.ScrollView.contentInset = UIEdgeInsetsMake(0, 120, 0, 120);
- 動(dòng)畫方法:
setContentOffset:。。。 animated:YES];
注意:設(shè)置VC.automaticallyAdjustsScrollViewInsets = NO; bug修復(fù)
代理:
代理也是一個(gè)屬性。用于監(jiān)聽srcollview的整個(gè)滾動(dòng)過程(正在滾動(dòng),滾動(dòng)到某位置,停止?jié)L動(dòng))。要想監(jiān)聽scrollview的滾動(dòng),必須給它設(shè)一個(gè)代理對(duì)象,給代理發(fā)送相應(yīng)的消息,讓代理得知它的滾動(dòng)過程
- 前提:必須遵守協(xié)議(在.m的interface中加UIscrollViewDelegate
遵守了協(xié)議就可以使用代理方法(可選); - 設(shè)置代理對(duì)象,
scrollview.dalegate = XX;
任何oc類型的對(duì)象都可以成為代理;只要它聲明代理方法;一般是控制器。
注意:必須把srcollview添加到控制器后,才開始將控制器設(shè)置為它的代理對(duì)象,否則將無法自動(dòng)調(diào)用代理方法,因?yàn)檫@種情況下scrollview還是nil的。
- 代理方法
1.scrollviewDidScroll:只要在拖拽,就自動(dòng)執(zhí)行
2.willbeginDragging:即將拖拽時(shí)。。。
3.willendDragging:即將停止拖拽
4.DidendDragging:已經(jīng)停止拖拽
5.Diddecelerating:減速完畢(停止?jié)L動(dòng))。特殊:如果沒有減速就停止了···
PS :代理屬性都是weak的(防止循環(huán)引用)
功能
-
內(nèi)容縮放
UISrcollview的另一個(gè)功能。需要通過代理方法viewForZoomingIn 返回scrollview的子控件,告訴srcollview縮放哪個(gè)子控件
QQ.png
補(bǔ)充:代理方法viewDidZooming………//監(jiān)聽縮放過程
分頁(yè)功能
例子演示:
-添加srcollview
-添加一個(gè)imageview,尺寸設(shè)置---再添加imageview,依次相接(for循環(huán)來做)
for(int i = 0;i<5;i++){
UIImageView *imgView = [[UIImageView alloc] init];
imgView.frame = CGRectMake((i * 300),0, 300, 200);
NSString *img = [NSString stringWithFormat:@"cloth%d",i+1];
imgView.image = [UIImage imageNamed:img];
imgView.backgroundColor = [UIColor grayColor];
imgView.contentMode = UIViewContentModeScaleAspectFit;
[self.myScrollview addSubview:imgView];
}
PS:優(yōu)化方法,當(dāng)圖片比較多時(shí),只需3個(gè)imageview,循環(huán)裝載圖片。
-設(shè)scrollview的contentSize
-開啟分頁(yè)功能:設(shè)scrollview的pagingEanble = YES;即可
PS:scrollview以其可視范圍尺寸作為一頁(yè)。
-顯示頁(yè)碼:使用控件UIPageControl
設(shè)置頁(yè)數(shù),前景背景色,位置,顯示最上層)
UIPageControl 的屬性:
- numberOfPages:頁(yè)數(shù)(等于圖片數(shù))
- currentPage //當(dāng)前頁(yè)碼
- hidden = YES //隱藏頁(yè)碼
- hidesForSinglePage = YES //單頁(yè)時(shí)隱藏頁(yè)碼
- 設(shè)置pageControl的圖片
實(shí)現(xiàn)分頁(yè)功能的思路:
監(jiān)聽scrollview停止?jié)L動(dòng)時(shí),實(shí)現(xiàn)頁(yè)碼切換
- 頁(yè)碼的計(jì)算,偏移量(Offset)的x除以scrollview的寬度。
-
方法一:
QQ.png -
方法二:
QQ.png
定時(shí)器:每隔一定時(shí)間滾動(dòng)
NSTimer類,提供一個(gè)定時(shí)器,做法:
需要完善——當(dāng)用戶滾動(dòng)時(shí),定時(shí)器重置,防止沖突
PS:可以將定時(shí)器部分的代碼分別出來
改進(jìn):加入多線程