方法&&屬性:
// 監(jiān)控目前滾動(dòng)的位置(默認(rèn)CGPointZero)
CGPoint contentOffset;
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;
// 滾動(dòng)范圍的大小(默認(rèn)CGSizeZero)
CGSize contentSize;
// 視圖在scrollView中的位置(UIEdgeInsetsZero)
UIEdgeInsets contentInset;
// 設(shè)置協(xié)議
id<UIScrollViewDelegate> delegate;
// 指定控件是否只能在一個(gè)方向上滾動(dòng)(默認(rèn)為NO)
BOOL directionalLockEnabled;
// 控制控件遇到邊框是否反彈(默認(rèn)為YES)
BOOL bounces;
// 控制垂直方向遇到邊框是否反彈(默認(rèn)為NO,如果為YES迂烁,bounces也是YES)
BOOL alwaysBounceVertical;
// 控制水平方向遇到邊框是否反彈(默認(rèn)為NO,如果為YES,bounces也是YES)
BOOL alwaysBounceHorizontal;
// 控制控件是否整頁翻動(dòng)(默認(rèn)為NO)
BOOL pagingEnabled;
// 控制控件是否能滾動(dòng)
BOOL scrollEnabled;
// 控制是否顯示水平方向的滾動(dòng)條
BOOL showsHorizontalScrollIndicator;
// 控制是否顯示垂直方向的滾動(dòng)條
BOOL showsVerticalScrollIndicator;
// 指定滾動(dòng)條在scrollerView中的位置
UIEdgeInsets scrollIndicatorInsets;
// 設(shè)定滾動(dòng)條的樣式
UIScrollViewIndicatorStyle indicatorStyle;
UIScrollViewDelegate詳解
//scrollView滾動(dòng)時(shí),就調(diào)用該方法筒严。任何offset值改變都調(diào)用該方法牵敷。即滾動(dòng)過程中,調(diào)用多次
-
(void)scrollViewDidScroll:(UIScrollView *)scrollView{
NSLog(@"scrollViewDidScroll");
CGPoint point=scrollView.contentOffset;
NSLog(@"%f,%f",point.x,point.y);
// 從中可以讀取contentOffset屬性以確定其滾動(dòng)到的位置。// 注意:當(dāng)ContentSize屬性小于Frame時(shí)哀托,將不會(huì)出發(fā)滾動(dòng)
}
// 當(dāng)scrollView縮放時(shí)缺脉,調(diào)用該方法痪欲。在縮放過程中,回多次調(diào)用
-
(void)scrollViewDidZoom:(UIScrollView *)scrollView{
NSLog(@"scrollViewDidScroll");
float value=scrollView.zoomScale;
NSLog(@"%f",value);
}
// 當(dāng)開始滾動(dòng)視圖時(shí)攻礼,執(zhí)行該方法勤揩。一次有效滑動(dòng)(開始滑動(dòng),滑動(dòng)一小段距離秘蛔,只要手指不松開陨亡,只算一次滑動(dòng)),只執(zhí)行一次深员。
-
(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
NSLog(@"scrollViewWillBeginDragging");
}
// 滑動(dòng)scrollView负蠕,并且手指離開時(shí)執(zhí)行。一次有效滑動(dòng)倦畅,只執(zhí)行一次遮糖。
// 當(dāng)pagingEnabled屬性為YES時(shí),不調(diào)用叠赐,該方法
-
(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
NSLog(@"scrollViewWillEndDragging");
}
// 滑動(dòng)視圖欲账,當(dāng)手指離開屏幕那一霎那,調(diào)用該方法芭概。一次有效滑動(dòng)赛不,只執(zhí)行一次。
// decelerate,指代罢洲,當(dāng)我們手指離開那一瞬后踢故,視圖是否還將繼續(xù)向前滾動(dòng)(一段距離),經(jīng)過測試,decelerate=YES
-
(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSLog(@"scrollViewDidEndDragging");
if (decelerate) {
NSLog(@"decelerate");
}else{
NSLog(@"no decelerate");}
CGPoint point=scrollView.contentOffset;
NSLog(@"%f,%f",point.x,point.y);
}
// 滑動(dòng)減速時(shí)調(diào)用該方法殿较。
-
(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
NSLog(@"scrollViewWillBeginDecelerating");
// 該方法在scrollViewDidEndDragging方法之后耸峭。
}
// 滾動(dòng)視圖減速完成,滾動(dòng)將停止時(shí)淋纲,調(diào)用該方法劳闹。一次有效滑動(dòng),只執(zhí)行一次洽瞬。
-
(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSLog(@"scrollViewDidEndDecelerating");
[_scrollView setContentOffset:CGPointMake(0, 500) animated:YES];
}
// 當(dāng)滾動(dòng)視圖動(dòng)畫完成后本涕,調(diào)用該方法,如果沒有動(dòng)畫片任,那么該方法將不被調(diào)用
-
(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
NSLog(@"scrollViewDidEndScrollingAnimation");
// 有效的動(dòng)畫方法為:
// - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated 方法
// - (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated 方法
}
// 返回將要縮放的UIView對(duì)象偏友。要執(zhí)行多次
-
(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
NSLog(@"viewForZoomingInScrollView");
return self.imgView;
}
// 當(dāng)將要開始縮放時(shí),執(zhí)行該方法对供。一次有效縮放位他,就只執(zhí)行一次。
-
(void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view{
NSLog(@"scrollViewWillBeginZooming");
}
// 當(dāng)縮放結(jié)束后产场,并且縮放大小回到minimumZoomScale與maximumZoomScale之間后(我們也許會(huì)超出縮放范圍)鹅髓,調(diào)用該方法。
-
(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale{
NSLog(@"scrollViewDidEndZooming");
}
// 指示當(dāng)用戶點(diǎn)擊狀態(tài)欄后京景,滾動(dòng)視圖是否能夠滾動(dòng)到頂部窿冯。需要設(shè)置滾動(dòng)視圖的屬性:_scrollView.scrollsToTop=YES;
-
(BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView{
return YES;
}
// 當(dāng)滾動(dòng)視圖滾動(dòng)到最頂端后,執(zhí)行該方法
-
(void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{
NSLog(@"scrollViewDidScrollToTop");
}
Tip:判斷uiscrollview是向上滾動(dòng)還是向下滾動(dòng)
int _lastPosition; //A variable define in headfile (void)scrollViewDidScroll:(UIScrollView *)scrollView{
int currentPostion = scrollView.contentOffset.y;
if (currentPostion - _lastPosition > 25) {
_lastPosition = currentPostion;
NSLog(@"ScrollUp now");
}
else if (_lastPosition - currentPostion > 25)
{
_lastPosition = currentPostion;
NSLog(@"ScrollDown now");
}
}
// 25 可以是任意數(shù)字确徙,可根據(jù)自己的需要來設(shè)定醒串。
// 升級(jí)版:到達(dá)頂部或底部時(shí)不會(huì)反彈-
(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
int currentPostion = scrollView.contentOffset.y;if (currentPostion - _lastPosition > 20 && currentPostion > 0) { //這個(gè)地方加上 currentPostion > 0 即可)
_lastPosition = currentPostion;NSLog(@"ScrollUp now");
}
else if ((_lastPosition - currentPostion > 20) && (currentPostion <= scrollView.contentSize.height-scrollView.bounds.size.height-20) ){
_lastPosition = currentPostion;NSLog(@"ScrollDown now");
}
}