01-UI基礎-04-00-UIScrollView

##繼承關係 Inherits Fromhtml

##一、 基本概念 ###1.1 什麼是UIScrollViewios

  • 移動設備的屏幕大小是有限的,如今直接展現用戶眼前的內容也至關有限
  • 碭山是的內容較多,超出一個屏幕時,用戶可經過滾動手勢來查看屏幕覺得的內容
  • 普通的UIView是不具有滾動功能,不能顯示過多內容
  • UIScrollView是一個能滾動的可視化控件,能夠用來展現內容,而且用來展現大量的內容,而且能夠經過滾動查看全部內容
  • 舉例:手機上的「設置」

###1.2 UIScrollView的基本使用設計模式

  • 將須要展現的內容添加到UIScrollView中
  • 設置UIScrollView的contentSize屬性,告訴UIScrollView全部內容的尺寸,也就是告訴他滾動範圍

###1.3 沒法滾動的解決辦法app

  • 沒有設置contentSize屬性
  • scrollEnabled = NO
  • 沒有接收到觸發事件:userInteractionEnabled = NO
  • 沒有取消autolayout功能

##二、 UIScrollView代理(delegate) ###2.1 基本常識ide

  • 不少時候,咱們想在UIScrollView滾動到某個位置或者中止滾動的時候作一寫特定的操做。
  • 要想完成上面的功能,前提條件就是實施監聽到UiScrollView的整個滾動過程
  • 當UiScrollView發生一些列的滾動操做時,會自動通知它的代理(delegate)
  • 要想監聽UIScrollView的滾動過程,就必須給UIScrollView設置一個代理對象,而後通知UIScrollView滾動的過程。
@property (nonatomic,assign) id <UIScrollViewDelegate>
  • UIScrollView與delegate之間的通信應該爲下圖所示

示意圖 能夠看出,要想成爲UIScrollView的得了gate必須實現對應方法才能監聽UIScrollView的滾動過程性能

  • UIScrollView將delegate須要實現的放大都定義在UIScrollViewDelegate協議中,所以只要遵照UIScrollViewDelegate協議,而後實現協議中相應地方法,就能夠監聽UIScrollView的滾動過程。

###2.2 代理設計模式的好處atom

  1. 監聽的思想:讓一個對象A監聽另外一個對象B的狀態
  2. 通知的思想:一個對象B發生改變,實時通知對象A

##三、 UIScrollView與控制器設計

  • 通常狀況下,就設置UIScrollView所在的控制器爲UIScrollView的delegate代理

  • 設置控制器爲UIScrollView的delegate的方法有兩種code

    • 代碼(selt就是控制器)
    self.srollView.delegate = self;
    • 經過storyboard拖線
  • 而後,控制器應該最受UIScrollViewDelegate協議

  • 最後,試下協議中定義的相關方法

##四、 UIScrollView的屬性 ###4.1 基本屬性 基本屬性

  • 這個屬性用來表示UIScrollView的滾動位置
@peoperty (nonatomic) CGPoint contentOffset;
  • 這個屬性用來表示UIScrollView內容尺寸,滾動範圍
@peoperty (nonatomic) CGSize contentSize;
  • 這個屬性可以在UIScrollView的4周增長額外的滾動區域
@peoperty (nonatomic) UIEdgeInsets contentInset;

###4.2 其餘屬性

  • 設置UIScrollView是否須要彈簧效果
@property(nonatomic) BOOL bounces;
  • 設置UIScrollView是否能滾動
@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
  • 是否顯示水平滾動條
@property(nonatomic) BOOL showsHorizontalScrollIndicator;
  • 是否顯示垂直滾動條
@property(nonatomic) BOOL showsVerticalScrollIndicator;

##五、 內容縮放 ###5.1 UIScrolView縮放原理

  • 當用戶在UIScrollView上使用捏合手勢時,UIScrollView會給代理髮送一條消息,詢問代理究竟要縮放本身內部的哪個子控件(哪一塊內容)
  • 當用戶使用捏合手勢時,UIScrollView會調用代理的viewForZoomingInScrollView:方法,這個方法放回的空間就是須要進行縮放的控件

###5.2 縮放的實現步驟

  1. 設置UIscrollView的id<UIScrollViewDelegate> delegate代理
  2. 設置minimumZoomScale,最小縮放比例
  3. 設置maximumZoonScale,最大縮放比例
  4. 讓代理實現下面的方法,返回須要縮放的視圖控件
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;

###5.3 跟縮放相關的其餘方法

  • 縮放完畢時調用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view;
  • 正在縮放時調用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView

##六、 UIPageControl(分頁)

  • 只要將UIScrollView的pageEable屬性設置爲YES,UIScrollView會被分割成多個獨立的頁面,裏面的內容能進行分頁展現

  • 通常配合UIPageControl加強分頁效果,UIPageControl屬性以下

    • 一共有多少頁
    @property (nonatomic) NSInteger numberOfOages;
    • 當前顯示頁碼
    @property (nonatomic) NSInteger currentPage;
    • 只有一頁時,是否須要隱藏頁碼指示器
    @property (nonatomic) BOOL hidesForSinglePage;
    • 其餘頁碼指示器顏色
    @property (nonatomic,retain) UIColor *pageIndicatorTintColor;
    • 當前頁碼指示器顏色
    @property (nonatomic,retain) UIColor *currentPageIndicatorTintColor;

##七、 NSTimer 計時器 ###7.1 做用

  • 在指定的時間執行指定的任務
  • 每隔一段時間執行指定的任務

###7.2 調用過程

  • 開啓定時器
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)titarget:(id)aTarget
			 									selector:(SEL)aSelector
 												userInfo:(id)userInfo
			 									repeats:(BOOL)yesOrNo;
  • 中止定時器(經過invalidate方法能夠中止定時器的工做,一旦定時器被中止,就不能再被執行任務。只能在建立一個新的定時器才能指向新的任務)
- (void)invalidate;
相關文章
相關標籤/搜索