UIScrollView的常見屬性和方法

2、UIScrollView 的常見屬性
一、contentSize
// default CGSizeZero
@property(nonatomic)  CGSize  contentSize;
1.1
contentSize 的含義:
告訴 UIScrollView 要展現的內容實際有多大,也就是告訴UIScrollView滾動的範圍。
1.2
若是UIScrollView沒法滾動,多是如下緣由:
1)沒有設置contentSize;
2)scrollEnabled = NO;
3)沒有接收到觸摸事件:userInteractionEnabled = NO。
1.3
UIScrollView的 frame.size 與  contentSize 的區別?
frame.size  指的是: UIScrollView 的可視區域的大小, UIScrollView自己的大小。
contentSize 指的是: UIScrollView 中所包含的子控件的大小(要滾動的實際內容的大小)。
若是須要滾動, contentSize 要比 frame.size 大。
二、contentOffset
// default CGPointZero
@property(nonatomic)  CGPoint  contentOffset;
2.1
contentOffset 的含義:
當UIScrollView內部的內容滾動時, 內容相對於UIScrollView左上角的偏移,也就是內容滾動到了什麼位置。
2.2
能夠經過代碼來設置這個屬性的值,來實現滾動。同時可使用下面的這個方法增長動畫效果的滾動。
// animate at constant velocity to new offset
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;

三、 contentInset
// default UIEdgeInsetsZero. add additional scroll area around content
@property(nonatomic) UIEdgeInsets  contentInset;
3.1
contentInset 的含義:
UIScrollView 的內容的內邊距,即內容距離UIScrollView的內邊距。
3.2
以下圖所示,黃色區域爲控制器的 view,藍色區域爲 UIScrollView,灰色區域是一張大圖,滾動大圖的左上角的地方,顯示出距離爲 20 的藍色區域就是設置了內邊距的效果。
self.scrollView.contentInset = UIEdgeInsetsMake(20, 20, 20, 20);

四、上述屬性的總結
下面一張圖總結 UIScrollView 的屬性:


五、其餘經常使用屬性
// 彈簧效果 default YES. if YES, bounces past edge of content and back again
@property(nonatomic) BOOL  bounces;
// 是否能滾動 default YES. turn off any dragging temporarily
@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
// 是否顯示水平滾動條 default YES. show indicator while we are tracking. fades out after tracking
@property(nonatomic) BOOLshowsHorizontalScrollIndicator;
// 是否顯示垂直滾動條 default YES. show indicator while we are tracking. fades out after tracking
@property(nonatomic) BOOL showsVerticalScrollIndicator;

3、UIScrollView 的代理
一、代理能夠幹什麼?
當 UIScrollView 進行滾動操做時,會自動通知它的代理(delegate)對象,給它的代理髮送相應的消息,讓代理得知它的滾動狀況。經過代理咱們能夠獲取當前滾動的位置:scrollView.contentOffset;也能夠監聽滾動事件。
二、代理方法
// any offset changes
// 只要 scrollView 滑動就會觸發 ( 會觸發屢次 )
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;                                               
// called on start of dragging (may require some time and or distance to move)
// 當將要拖拽 scrollView 時觸發 , 手指接觸 scrollView 而且將要滑動時觸發
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
// called on finger up if the user dragged. velocity is in points/millisecond. targetContentOffset may be changed to adjust where the scroll view comes to rest
// 當結束拖拽時觸發 ( 手指將要離開屏幕 )
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint*)targetContentOffset NS_AVAILABLE_IOS(5_0);
// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards
// 當結束拖拽時觸發 ( 手指已經離開屏幕 )
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
// called on finger up as we are moving
// 當 scrollView 滑動將要減速時觸發 ( 將要中止 )
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;
// called when scroll view grinds to a halt  
// 當 scrollView 結束減速時觸發 ( 中止滑動 )
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;      
// called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating
// 當設置 scrollView, 有動畫效果時觸發
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;
// return a yes if you want to scroll to the top. if not defined, assumes YES
// 只有當 scrollsToTop 屬性設置爲 YES 時 , 該方法纔會觸發 , 進一步詢問點擊狀態條是否有效
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;
// called when scrolling animation finished. may be called immediately if already at top
// 當點擊狀態條而且 scrollView 滑動到頂端時觸發
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;
下面是跟縮放有關的代理方法:
// return a view that will be scaled. if delegate returns nil, nothing happens
//  返回要縮放的view , 只能是子視圖 , 不能是 scrollView 自己
- (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;   
// called before the scroll view begins zooming its content
// 當將要開始縮放時觸發
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(nullableUIView *)view NS_AVAILABLE_IOS(3_2);
// scale between minimum and maximum. called after any 'bounce' animations
// 當結束縮放時觸發
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view atScale:(CGFloat)scale;
// any zoom scale changes
// 只要 scrollView 縮放就會觸發
- (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2);
三、UIScrollView 的縮放
3.1 設置最大放大倍數和最小縮小倍數
self.scrollView.maximumZoomScale = 3;
self.scrollView.minimumZoomScale = 0.3;
3.2 UIScrollView 的縮放原理
當用戶在UIScrollView身上使用捏合手勢時,UIScrollView會調用代理的viewForZoomingInScrollView:方法,這個方法返回的控件就是須要進行縮放的控件。須要注意的是:UIScrollView 一次只能縮放一個子控件。app

相關文章
相關標籤/搜索