UIScrollViewapp
【滾動視圖】很是重要動畫
UIScrollView是滾動視圖,是其它帶有滾動功能視圖的父類,spa
自己不顯示或者只顯示背景,主要負責子視圖的滾動和翻頁。代理
1、經常使用屬性orm
1、基本方法事件
a、設置內容尺寸ci
//設置滾動視圖的contentSizeget
self.scrollView.contentSize = self.label.frame.size;it
//內容的尺寸,默認狀況下 內容的尺寸等於 視圖的大小io
b、是否滾動、邊界回彈、指示條、一直滾動
//設置是否能滾動 ,默認YES
//scrollView.scrollEnabled = NO;
//滾動條
//是否顯示水平方向的滾動條
scrollView.showsHorizontalScrollIndicator = YES;
//是否顯示垂直方向的滾動條
scrollView.showsVerticalScrollIndicator = NO;
//滾動條風格
//UIScrollViewIndicatorStyleDefault,
//UIScrollViewIndicatorStyleBlack,
// UIScrollViewIndicatorStyleWhite
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
//設置是否能夠回彈
scrollView.bounces = YES;
//水平方向一直能夠滾動(YES能夠滾動),條件:內容的大小小於視圖的大小,回彈必須是YES
scrollView.alwaysBounceHorizontal = YES;
//垂直方向一直能夠滾動
scrollView.alwaysBounceVertical = YES;
c、鬆手後的減速的加速度
//設置鬆手之後減速的加速度
//CGFloat UIScrollViewDecelerationRateNormal 正常減速
//CGFloat UIScrollViewDecelerationRateFast 快速減速
scrollView.decelerationRate = UIScrollViewDecelerationRateFast;
d、點擊狀態欄回滾到頂部
//點擊狀態欄自動滾回頂部,默認yes;
scrollView.scrollsToTop = YES;
e、設置偏移偏移量
//設置偏移,重要屬性
scrollView.contentOffset = CGPointMake(300, 300);
//等5秒調用self 的 wait方法
[self performSelector:@selector(wait) withObject:nil afterDelay:5];
- (void)wait {
//設置偏移,帶有動畫效果
[_scrollView setContentOffset:CGPointMake(100, 100) animated:YES];
}
也就是上邊的動畫結束,調用方法
//用代碼寫 offset 滾動的時候 纔會調用這個方法
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
NSLog(@"代碼方式,滾動動畫結束");
}
f 、按頁滾動
//設置是否能夠按頁滾動,默認NO;
scrollView.pagingEnabled = YES;
//若是滾動視圖的寬度,正好是子視圖的寬度的整數倍,正好按頁滾動,一頁一頁的完整顯示
g、縮放相關
//設置縮放的大小,必須設置代理才能縮放(實現對應的方法viewForZoomingInScrollView)
scrollView.delegate = self;
//最小縮放倍數
scrollView.minimumZoomScale = 0.5;
//最大縮放倍數
scrollView.maximumZoomScale = 2.0;
/**
* 實現代理方法
*/
//指定須要縮放的視圖
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return scrollView.subviews[0];
}
2、代理方法
a、滾動
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
NSLog(@"即將開始拖拽");
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
NSLog(@"已經中止拖拽");
}
b、自由減速
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
NSLog(@"即將開始減速");
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
NSLog(@"中止結束 減速");
}
c、代碼方式滾動結束
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
NSLog(@"代碼方式,滾動動畫結束");
}
d、縮放相關
//指定須要縮放的視圖
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return scrollView.subviews[0];
}
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
NSLog(@"即將開始縮放");
}
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
NSLog(@"已經結束縮放");
}
2、按頁控制
應用
UIScrollView經常使用屬性
contentSize
contentInset 不經常使用
bounces 彈簧效果
pagingEnabled 是不是分頁滑動效果
scrollEnabled 是否容許滑動,若是設置爲no,則只能經過方法滑動,不能經過手勢滑動
showsHorizontalScrollIndicator 顯示水平滾動條
showsVerticalScrollIndicator 顯示垂直滾動條
indicatorStyle 滾動條風格
scrollIndicatorInsets 滾動條inset, 不經常使用
decelerationRate 鬆手後加速度,設置越大,停下來越慢,不經常使用
scrollsToTop 是否支持點擊 statusbar回到頂端,默認YES
isTracking // 只讀屬性,判斷滾動視圖是否被觸摸,可能尚未滑動
isDragging // 只讀屬性,判斷滾動視圖是否被滑動,指手未鬆開
isDecelerating // 只讀屬性,判斷是否在減速運動,指手指鬆開後
縮放:
minimumZoomScale
maximumZoomScale
實現UIScrollView的縮放,必須使maximumZoomScale(默認1.0)和minimumZoomScale(默認1.0)不一樣 ,而且須要在delegate中的viewForZoomingInScrollView: 方法中返回須要縮放的view。實現以上便可進行縮放。
pragma mark -
// return a view that will be scaled. if delegate returns nil, nothing happen
// 一旦滾動,就會無條件調用,沒有任什麼時候間點
// 不管手指在拖仍是不在拖
// 在鬆開手指的那一瞬間被調用
// 滑動結束,將要開始減速
// 手指離開了,但實際上scrollView並不必定結束了滾動
// 將要減速
// 減速結束
// 結速滾動後調用,要經過代碼讓它滾動時,此方法纔會被調用
// 當用戶點出iPhone狀態條時,滾動視圖委託能夠決定視圖是否滾動回到開頭
頁控制 UIPageControl
//建立一個Scrollview
- (void)createScrollView {
UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];
self.scrollView = scrollView;
self.scrollView.pagingEnabled = YES;
//設置代理
scrollView.delegate = self;
[self.view addSubview:scrollView];
[self createPageControl];
}
#pragma mark - UIScrollViewDelegate
//結束減速代理
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
//設置pageControl的小圓點
//contenOfsset 用滾動視圖水平方向的偏移量 除以scrollView的寬度 ,得出當前所在頁面
NSInteger currentPage = scrollView.contentOffset.x / scrollView.frame.size.width;
//設置pageControl的選中點
self.pageControl.currentPage = currentPage;
}
- (void)createPageControl {
UIPageControl *pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake((self.view.frame.size.width - 300 ) / 2, 500, 300,40)];
self.pageControl = pageControl;
[self.view addSubview:pageControl];
pageControl.numberOfPages = 4;
//設置小圓點
pageControl.pageIndicatorTintColor = [UIColor purpleColor];
//設置選中的小圓點的顏色
pageControl.currentPageIndicatorTintColor = [UIColor greenColor];
//添加事件
[pageControl addTarget:self action:@selector(pageControlPressed:) forControlEvents:UIControlEventValueChanged];
}
//pageControl值發生變化
- (void)pageControlPressed:(UIPageControl*)sender {
//設置滾動視圖的偏移量
//獲得水平偏移量
CGFloat offsetX = sender.currentPage * _scrollView.frame.size.width;
[_scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];
}