UIScrollView 滾動視圖 (實例)

UIScrollView 類負責全部基於 UIKit 的滾動操做。算法

 

1、建立app

 

C代碼   收藏代碼
  1. CGRect bounds = [ [ UIScreen mainScreen ] applicationFrame ] ;    
  2. UIScrollView* scrollView = [ [UIScrollView alloc ] initWithFrame:bounds ];    

或者函數

C代碼   收藏代碼
  1. UIScrollView *scrollView   =[[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0,self.view.frame.size.width, 400)];   
 

當你建立完滾動視圖後,你能夠將另外一個視圖的內容粘合到滾動視圖的空白頁上。這回建立一個滾動的內容窗口:spa

 

C代碼   收藏代碼
  1. [ scrollView addSubview:myView];   
 

你必須給出內容的實際大小,這樣滾動視圖才知道滾動的範圍:.net

 

C代碼   收藏代碼
  1. scrollView.contentSize = myView.frame.size;   
 

要開啓縮放功能須要調整視圖的兩個屬性,分別是maxinumZoomScale 和 mininumZoomScale 。這樣就能夠容許用戶使用捏合手勢調整內容大小:設計

 

C代碼   收藏代碼
  1. scrollView.maxinumZoomScale = 2.0;//容許放大2倍    
  2. scrollView.mininumZoomScale = 0.5;//容許放大到0.5倍   
 

要打開縮放功能,你還須要增長一個UIScrollViewDelegate 代理,經過一個名爲viewForZoomingScrollView 的方法作出響應。這個方法會返回進行縮放時所使用的 UIView 對象:代理

 

C代碼   收藏代碼
  1. scrollView.delegate = self;    
  2. - (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView{    
  3.     retutn myView;    
  4. }    
 

Tips:對於大規模數據,你可能會在最初使用一個低於實際大小(1.0)的縮放比例,讓用戶能夠平滑地進行放大。指針

 

C代碼   收藏代碼
  1. scrollView.pagingEnabled = YES;  
  2. scrollView.backgroundColor = [UIColor blueColor];  
  3. scrollView.showsVerticalScrollIndicator = NO;  
  4. scrollView。showsHorizontalScrollIndicator = NO;  
  5. scrollView.delegate = self;  
  6. CGSize newSize = CGSizeMake(self.view.frame.size.width * 2, self.view.frame.size.height);  
  7. [scrollView setContentSize:newSize];  
  8.  [self.view addSubview: scrollView];  
 

2、屬性對象

除了上面用到的縮放屬性外,滾動視圖還有會讓你多其餘屬性,能夠對現實內容的行爲進行微調。你能夠對 UIScrollView 類進行多方位定製。下面這些屬性是最經常使用的。blog

 

1.indicatorStyle

指定你但願使用的滾動條指示器的類型。默認行爲是在白邊界上繪製黑色的滾動條,這在大多數背景下都適用。可用風格以下:

 

C代碼   收藏代碼
  1. UIScrollViewIndicatorStyleDefault    
  2. UIScrollViewIndicatorStyleBlack    
  3. UIScrollViewIndicatorStyleWhite    
 

2.contentOffset

 

一個CGPoint結構,其中包含有要顯示內容相對於窗口左上角的偏移量。默認是從0×0開始的,可是你也能夠將顯示內容放在其餘位置。

 

3.directionalLockEnabled

默認行爲是容許用戶同時進行橫向和縱向的滾動。將這個屬性設置爲YES會致使將用戶的滾動行爲鎖定成只容許橫向或縱向進行,具體方向由初始姿態決定。

 

4.bounces

當用戶抵達滾動區域邊緣時,這個功能容許用戶稍微拖動到邊界外一點。當用戶鬆開手指後,這個區域會像個橡皮筋同樣,彈回到原位,給用戶一個可見的提示,表示他已經到達了文檔開始或結束位置。若是不想讓用戶的滾動範圍可以超出可見內容,能夠將這個屬性設置爲NO。

 

5.bouncesZoom

相似於bounces 選項,這個方法能夠令用戶的縮放操做超出最大或最小縮放級別,而後彈回到範圍之內。若是你不想讓用戶可以超出你指定的範圍進行縮放,將這個屬性設置爲NO。

 

6.pagingEnabled (參考:UIPageControl 分頁控件-IOS開發

當開啓了分頁功能時,滾動視圖被分割成多個獨立區段,二用戶的滾動體驗則變成了頁面翻轉,你能夠用這個屬性來進行頁面翻轉。

UIPageControl有一個userInteractionEnabled你能夠設置它爲NO。就是點擊的時候它不調用任何方法。而後設置它的currentPage 爲0,並把它加到view上去。

 

接下來在UIScrollView的delegate方法:

C代碼   收藏代碼
  1. - (void)scrollViewDidScroll:(UIScrollView *)scrollView;    
 

在這裏你能夠寫上關於UIPageControl的頁面設置的算法。以下

C代碼   收藏代碼
  1. int index = fabs(scrollView.contentOffset.x) /scrollView.frame.size.width;     
  2. pageControl.currentPage = index;   

  

3、委託方法

能夠賦予滾動視圖一個委託,下列委託方法會在特定時刻收到通知。

 

C代碼   收藏代碼
  1. -(void)scrollViewDidScroll:(UIScrollView*)scrollView;//會在視圖滾動時收到通知。包括一個指向被滾動視圖的指針,從中能夠讀取contentOffset屬性以肯定其滾動到的位置。   
C代碼   收藏代碼
  1. -(void)scrollViewWillBeginDragging:(UISCrollView*)scrollView;//當用戶首次在某個方向上進行拖動時獲得通知。這個方法會獲得被做爲參數傳遞的滾動視圖指針,也一樣能夠從中讀取 contentOffset 屬性。  
C代碼   收藏代碼
  1. -(void)scrollViewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)decelerate;    
  2. //當用戶擡起拖動到手指時獲得通知。還會獲得一個布爾值,知名報告滾動視圖最後位置以前,是否須要減速。   
C代碼   收藏代碼
  1. -(void)scrollViewWillBeginDecelerate:(UIScrollView*)scrollView;//當用戶擡起手指而視圖須要繼續移動時,會收到通知。這個方法能夠用來讀取 contentOffset屬性,從而判斷出當用戶擡起手指錢最後一次滾動到的位置,雖然這個位置並不會使滾動條的最終中止位置。   
C代碼   收藏代碼
  1. -(void)scrollViewDidEndDecelerating:(UIScrollView*)scrollView;//當上面提到的減速完畢、滾動視圖中止時獲得通知。收到這個通知的時刻,滾動視圖的contentOffset屬性會反映出滾動條最終中止的位置。  
C代碼   收藏代碼
  1. -(void)scrollViewDidEndZooming:(UIScrollview*)scrollView withView:(UIView*)view atScale:(float)scale;//當用戶對內容進行縮放時,會收到通知。縮放比例表示爲一個浮點值,會做爲參數傳遞進來。  
C代碼   收藏代碼
  1. -(BOOL)scrollViewShouldScrollToTop:(UIScrollView*)scrollView;    
  2. -(void)scrollViewDidScrollToTop:(UIScrollView*)scrollView;    
  3. //當用戶點出iPhone狀態條時,滾動視圖委託能夠決定視圖是否滾動回到開頭。  
       

OK,都總結完了,後面會寫一個頁面翻轉的例子敬請關注。

 

來源: http://blog.csdn.net/iukey/article/details/7319314

 

 

實例:

 

viewcontroller.h

 

C代碼   收藏代碼
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface ViewController : UIViewController  
  4. {  
  5.     __weak IBOutlet UIScrollView *scroller;  
  6. }  
  7.   
  8. @end  
 

viewcontroller.m

 

C代碼   收藏代碼
  1. - (void)viewDidLoad  
  2. {  
  3.     [scroller setScrollEnabled:YES];  
  4.     [scroller setContentSize:CGSizeMake(320, 1600)];  
  5.       
  6.     [super viewDidLoad];  
  7.     // Do any additional setup after loading the view, typically from a nib.  
  8. }  
  9.   
  10. - (void)viewDidUnload  
  11. {  
  12.   
  13.     scroller = nil;  
  14.     [super viewDidUnload];  
  15.     // Release any retained subviews of the main view.  
  16.     // e.g. self.myOutlet = nil;  
  17. }  

 

 

拖拽scrollview視圖到Fist Responder.

 

 

 

1. XIB文件的理解

        經過IB設計的CnView和EnView分別對應一個XIB文件,在CnView的XIB文件中,主要採用XML格式描述了Button和Label控件的屬性(這裏不考慮View自己的背景等屬性),有個Button和Label,以及Button和Label的位置、大小等。EnView的XIB文件相似。

 

2. ViewController

       每一個View對應有個視圖控制器(多個View能夠採用同一個視圖控制器,後邊再說),能夠看作MVC中的C(儘管嚴格意義上不是),好比:CnView界面點擊按鈕以後的響應動做是由ViewController來實現的。

 

3. XIB和ViewController之間的關係

     XIB是表現,ViewController一方面響應XIB上的操做(好比點擊、滑動等),同時也控制XIB的顯示。

 

4. File's Owner

     重點就是這裏了,View和ViewController之間的對應關係,須要一個橋樑來進行鏈接的(即,對於一個視圖,他如何知道本身的界面的操做應該由誰來響應),這個橋樑就是File's Owner。

     選中某個XIB的File's Owner,在Inspector中能夠看到屬性:File Name和Custom Class,該File's Owner就是用來綁定File Name中的xib文件和Custom Class中的ViewController的,在作了這個綁定以後,按住control鍵,拖動File's Owner到xib中的某個控件的時候,就是Custom Class中定義的IBOutlet元素與xib中元素進行鏈接的過程,一樣,拖動"xib中的控件的動做"到File's Owner的時候,就是將xib中該動做的響應與Custom Class中某個IBAction進行鏈接的過程。

     所以,在存在多個xib文件的狀況下,即:有多個View,那麼每一個View能夠採用不一樣的ViewController,也能夠所有采用相同的一個ViewController,經過File's Owner進行關聯便可。

     其實,File's Owner就是Custom Class類型的對象,而xib中的其餘元素都是該對象的成員變量,可是須要手動來關聯Custom Class中的成員變量與xib中對象之間的關係。

 

5. First Responder

     View中每次只會有一個對象與用戶進行交互,那麼當前交互的對象即爲First Responder。好比點擊文本框,那麼此時文本框就是First Responder

 

6. IB中的File's Owner是一個對象,擁有界面元素的拷貝

 

 

一個是IBOutlet :指界面元素在代碼中的’代號‘

一個是IBAction:指界面元素產生事件在代碼中的觸發函數

 

 

來源:http://blog.csdn.net/donhao/article/details/7088446