IOS基礎UI之(八)UIScrollView

來源:互聯網
上載者:User

IOS基礎UI之(八)UIScrollView
什麼是UIScrollView

行動裝置的螢幕大小是極其有限的,當展示的內容比較多,超出了一個螢幕時就無法顯示了。因此有了UIScrollView,它可以使使用通過滾動手勢查看螢幕外的內容。

UIScrollView是一個能夠滾動的視圖控制項,可以用來展示大量的內容,並且可以通過滾動查看所有內容。 應用例子如:手機上的“設定”

 

UIScrollView 常見屬性

 

// 這個屬性用來表示UIScrollView滾動的位置@property(nonatomic) CGPoint contentOffset; //這個屬性用來表示UIScrollView內容的尺寸,滾動範圍(能滾多遠)@property(nonatomic) CGSize contentSize; //這個屬效能夠在UIScrollView的4周增加額外的捲動區域@property(nonatomic) UIEdgeInsets contentInset; //設定UIScrollView是否需要彈簧效果@property(nonatomic) BOOL bounces;//設定UIScrollView是否能滾動@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled; //是否顯示水平捲軸@property(nonatomic) BOOL showsHorizontalScrollIndicator;//是否顯示垂直捲軸@property(nonatomic) BOOL showsVerticalScrollIndicator;


 

 

 

 

UIScrollView的常用代理方法:

 

 

//當使用者開始拖拽scrollView時就會調用-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{    NSLog(@=============開始拖拽===========);}//只要scrollView正在滾動,就會調用-(void)scrollViewDidScroll:(UIScrollView *)scrollView{    NSLog(@============== 正在拖拽 ==========%@,NSStringFromCGPoint(scrollView.contentOffset));}//使用者停止拖拽時調用-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{    NSLog(@============使用者停止拖拽時調用===========);}//只要scrollView正在縮放,就會調用-(void)scrollViewDidZoom:(UIScrollView *)scrollView{    NSLog(@============正在縮放===========);}//當使用者使用捏合手勢的時候會調用-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{    NSLog(@============開始縮放===========);    return self.imageView;}

 

UIScrollView設定代理的步驟

 

1.設定控制器delegate,一般情況下,就設定UIScrollView所在的控制器 為UIScrollView的delegate。

設定控制器為UIScrollView的delegate有2種方法:

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

self.scrollView.delegate =self;

(2)通過storyboard拖線(右擊UIScrollView)

 

2.控制器應該遵守UIScrollViewDelegate協議

 

@interface ViewController ()

3.實現協議中相應的方法,就可以監聽UIScrollView的滾動過程了

 

 

 

UIScrollView的縮放 原理:

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

 

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


實現步驟:

 

1.設定UIScrollView的id delegate代理對象

2.設定minimumZoomScale:縮小的最小比例

3.設定maximumZoomScale:放大的最大比例

4.讓代理對象實現下面的方法,返回需要縮放的視圖控制項

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

 

跟縮放相關的其他代理方法

縮放完畢的時候調用

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

正在縮放的時候調用

- (void)scrollViewDidZoom:(UIScrollView *)scrollView

 

圖片縮放例子:

1.設定storyboard,添加UIScrollView和UIImageView

 

2.設定scollView的尺寸、縮放比例以及讓控制器成為代理,並重現代理方法實現縮放功能。

 

////  ViewController.m//  圖片縮放scrollview#import ViewController.h@interface ViewController ()@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;@property (weak, nonatomic) IBOutlet UIImageView *imageView;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        //設定尺寸    self.scrollView.contentSize = self.imageView.frame.size;        //設定代理    self.scrollView.delegate = self;        // 設定最大和最小的縮放比例    self.scrollView.maximumZoomScale = 2.0;    self.scrollView.minimumZoomScale = 0.5;}#pragma mark 代理方法//當使用者開始拖拽scrollView時就會調用-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{    NSLog(@=============開始拖拽===========);}//只要scrollView正在滾動,就會調用-(void)scrollViewDidScroll:(UIScrollView *)scrollView{    NSLog(@============== 正在拖拽 ==========%@,NSStringFromCGPoint(scrollView.contentOffset));}//使用者停止拖拽時調用-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{    NSLog(@============使用者停止拖拽時調用===========);}//只要scrollView正在縮放,就會調用-(void)scrollViewDidZoom:(UIScrollView *)scrollView{    NSLog(@============正在縮放===========);}//當使用者使用捏合手勢的時候會調用-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{    NSLog(@============開始縮放===========);    return self.imageView;}@end


 

喜馬拉雅例子:

1.設定storyboard,添加UIScrollView(包括裡面內容)、頭部view以及底部view

 

2.設定scollView

 

////  ViewController.m//  喜馬拉雅#import ViewController.h@interface ViewController ()@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;@property (weak, nonatomic) IBOutlet UIButton *lastBtn;@property (weak, nonatomic) IBOutlet UIView *topView;@property (weak, nonatomic) IBOutlet UIView *bottomView;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        //設定尺寸    //CGFloat contentY = self.lastBtn.frame.origin.y + self.lastBtn.frame.size.height+10;    //CGRectGetMaxY 擷取最大的y值    CGFloat contentY = CGRectGetMaxY(self.lastBtn.frame) + 10;    self.scrollView.contentSize = CGSizeMake(0, contentY);        CGFloat topH = self.topView.frame.size.height;    CGFloat bottomH = self.bottomView.frame.size.height;        //設定一開始的滾動位置    self.scrollView.contentOffset = CGPointMake(0, -topH);        //額外增加捲動區域    self.scrollView.contentInset = UIEdgeInsetsMake(topH, 0, bottomH + 10, 0);}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];      }@end
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.