iOS開發之UIScrollView

1UIScrollView的用法:ide

(1)將須要展現的內容添加到UIScrollView中性能

(2)設置UIScrollView的contentSize屬性,告訴UIScrollView全部內容的尺寸,也就是告訴它滾動的範圍(能滾多遠,滾到哪裏是盡頭)atom

2UIScrollView沒法滾動的解決辦法代理

若是UIScrollView沒法滾動,多是如下部分緣由:對象

(1) 沒有設置滾動範圍contentSize事件

設置例如:self.scrollView.contentSize = self.myimageView.frame.size;圖片

   等價於:self.scrollView.contentSize = self. myimageView.image.size;get

(2)scrollEnabled = NOit

(3)沒有接收到觸摸事件:userInteractionEnabled = NOio

(4)沒有取消autolayout功能(要想scrollView滾動,必須取消autolayout)

 

3UIScrollView的屬性:

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

  -PO9

 

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

4、內容縮放

有些時候,咱們可能要對某些內容進行手勢縮放,以下圖所示:

 

UIScrollView不只能滾動顯示大量內容,還能對其內容進行縮放處理,也就是說,要完成縮放功能的話,只須要將須要縮放的內容添加到UIScrollView中

UIScrollView的縮放原理:

當用戶在UIScrollView身上使用捏合手勢時,UIScrollView會給代理髮送一條消息,詢問代理究竟要縮放本身內部的哪個子控件(哪一塊內容)

 

當用戶在UIScrollView身上使用捏合手勢時,UIScrollView會調用代理的viewForZoomingInScrollView:方法,這個方法返回的控件就是須要進行縮放的控件

縮放實現步驟:

  1. 設置UIScrollView的id<UISCrollViewDelegate> delegate代理對象
  2. 設置minimumZoomScale :縮小的最小比例
  3. 設置maximumZoomScale :放大的最大比例
  4. 讓代理對象實現下面的方法,返回須要縮放的視圖控件

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;

跟縮放相關的其餘代理方法:

  • Ø 縮放完畢的時候調用

- (void)scrollViewDidZoom:(UIScrollView *)scrollView

  • Ø 正在縮放的時候調用

-(void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view

 

5、分頁

只要將UIScrollView的pageEnabled屬性設置爲YES,UIScrollView會被分割成多個獨立頁面,裏面的內容就能進行分頁展現。分頁經常使用於圖片輪播,好比廣告條、新版本特性。

通常會配合UIPageControl加強分頁效果,用UIPageControl作出圖片輪播下方導航小點。

UIPageControl控件經常使用屬性以下

  • Ø 一共有多少頁

@property(nonatomic) NSInteger numberOfPages;

  • Ø 當前顯示的頁碼

@property(nonatomic) NSInteger currentPage;

  • Ø 只有一頁時,是否須要隱藏頁碼指示器

@property(nonatomic) BOOL hidesForSinglePage;

  • Ø 其餘頁碼指示器的顏色

@property(nonatomic,retain) UIColor *pageIndicatorTintColor;

  • Ø 當前頁碼指示器的顏色

@property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;

6UIScrollView的代理(delegate

不少時候,咱們想在UIScrollView正在滾動或滾動到某個位置或者中止滾動時作一些特定的操做。

要想完成上述功能,前提條件就是可以監聽到UIScrollView的整個滾動過程。

當UIScrollView發生一系列的滾動操做時, 會自動通知它的代理(delegate)對象,給它的代理髮送相應的消息,讓代理得知它的滾動狀況。

也就是說,要想監聽UIScrollView的滾動過程,就必須先給UIScrollView設置一個代理對象,而後經過代理得知UIScrollView的滾動過程。

UIScrollView將delegate須要實現的方法都定義在了UIScrollViewDelegate協議中,所以要想成爲UIScrollView的delegate,必須遵照UIScrollViewDelegate協議,而後重寫協議中相應的方法,就能夠監聽UIScrollView的滾動過程了。

 

UIScrollView和控制器:

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

設置控制器爲UIScrollView的delegate有2種方法:

1)經過代碼(self就是控制器)

self.scrollView.delegate = self;

2)經過storyboard拖線(右擊UIScrollView

 

例如:

#import "MJViewController.h"

 

@interface MJViewController () <UIScrollViewDelegate>

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

@property (weak, nonatomic) IBOutlet UIImageView *minionView;

@end

// 代理 \ 委託

 

@implementation MJViewController

 

- (void)viewDidLoad

{

    [super viewDidLoad];

   

    // 設置內容尺寸

    self.scrollView.contentSize = self.minionView.frame.size;

   

    // 設置

    self.scrollView.delegate = self;

   

    // 設置最大和最小的縮放比例

    self.scrollView.maximumZoomScale = 2.0;

    self.scrollView.minimumZoomScale = 0.2;

}

 

/**

 *  當用戶開始拖拽scrollView時就會調用

 */

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

    NSLog(@"開始拖拽-----");

}

 

/**

 *  只要scrollView正在滾動,就會調用

 */

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    NSLog(@"----正在滾動--%@", NSStringFromCGPoint(scrollView.contentOffset));

}

 

/**

 *  當用戶使用捏合手勢的時候會調用

 *

 *  @return 返回的控件就是須要進行縮放的控件

 */

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

{

    NSLog(@"----開始縮放");

    return self.minionView;

}

 

/**

 *  正在縮放的時候會調用

 */

- (void)scrollViewDidZoom:(UIScrollView *)scrollView

{

    NSLog(@"----正在縮放");

}

 

- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

@end

相關文章
相關標籤/搜索