UIScrollView 和 UIPageControl

UIScrollViewapp

【滾動視圖】很是重要動畫

UIScrollView是滾動視圖,是其它帶有滾動功能視圖的父類,spa

自己不顯示或者只顯示背景,主要負責子視圖的滾動和翻頁。代理

1、經常使用屬性orm

1、基本方法事件

  a、設置內容尺寸ci

  //設置滾動視圖的contentSizeget

    self.scrollView.contentSize = self.label.frame.size;it

   //內容的尺寸,默認狀況下 內容的尺寸等於 視圖的大小io

  b、是否滾動、邊界回彈、指示條、一直滾動

    //設置是否能滾動 ,默認YES

    //scrollView.scrollEnabled = NO;

    //滾動條

    //是否顯示水平方向的滾動條

    scrollView.showsHorizontalScrollIndicator = YES;

    //是否顯示垂直方向的滾動條

    scrollView.showsVerticalScrollIndicator = NO;

   //滾動條風格

   //UIScrollViewIndicatorStyleDefault,

    //UIScrollViewIndicatorStyleBlack,

    // UIScrollViewIndicatorStyleWhite

    scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;

   //設置是否能夠回彈

    scrollView.bounces = YES;

   //水平方向一直能夠滾動(YES能夠滾動),條件:內容的大小小於視圖的大小,回彈必須是YES

    scrollView.alwaysBounceHorizontal = YES;

    //垂直方向一直能夠滾動

    scrollView.alwaysBounceVertical = YES;

  c、鬆手後的減速的加速度

    //設置鬆手之後減速的加速度

    //CGFloat UIScrollViewDecelerationRateNormal 正常減速

    //CGFloat UIScrollViewDecelerationRateFast 快速減速

    scrollView.decelerationRate = UIScrollViewDecelerationRateFast;

        d、點擊狀態欄回滾到頂部

  //點擊狀態欄自動滾回頂部,默認yes;

    scrollView.scrollsToTop = YES;

        e、設置偏移偏移量

    //設置偏移,重要屬性

    scrollView.contentOffset = CGPointMake(300, 300);

  //等5秒調用self 的 wait方法

    [self performSelector:@selector(wait) withObject:nil afterDelay:5];

- (void)wait {

    //設置偏移,帶有動畫效果

    [_scrollView setContentOffset:CGPointMake(100, 100) animated:YES];

}

也就是上邊的動畫結束,調用方法

//用代碼寫 offset 滾動的時候 纔會調用這個方法

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {

    NSLog(@"代碼方式,滾動動畫結束");

}

        f 、按頁滾動

   //設置是否能夠按頁滾動,默認NO;

    scrollView.pagingEnabled = YES;

    //若是滾動視圖的寬度,正好是子視圖的寬度的整數倍,正好按頁滾動,一頁一頁的完整顯示

        g、縮放相關

 //設置縮放的大小,必須設置代理才能縮放(實現對應的方法viewForZoomingInScrollView)

    scrollView.delegate = self;

    //最小縮放倍數

    scrollView.minimumZoomScale = 0.5;

    //最大縮放倍數

    scrollView.maximumZoomScale = 2.0;

/**

 *  實現代理方法

 */

//指定須要縮放的視圖

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

    

    return scrollView.subviews[0];

2、代理方法

        a、滾動

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {

    NSLog(@"即將開始拖拽");

}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {

    NSLog(@"已經中止拖拽");

}

        b、自由減速

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {

    NSLog(@"即將開始減速");

}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    NSLog(@"中止結束 減速");

        c、代碼方式滾動結束

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {

    NSLog(@"代碼方式,滾動動畫結束");

}

        d、縮放相關

//指定須要縮放的視圖

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

        return scrollView.subviews[0];

}

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {

    NSLog(@"即將開始縮放");

}

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {

    NSLog(@"已經結束縮放");

}

2、按頁控制

應用

UIScrollView經常使用屬性

contentSize

contentInset 不經常使用

bounces 彈簧效果

pagingEnabled 是不是分頁滑動效果

scrollEnabled 是否容許滑動,若是設置爲no,則只能經過方法滑動,不能經過手勢滑動

showsHorizontalScrollIndicator 顯示水平滾動條

showsVerticalScrollIndicator 顯示垂直滾動條

indicatorStyle 滾動條風格

scrollIndicatorInsets 滾動條inset, 不經常使用

decelerationRate 鬆手後加速度,設置越大,停下來越慢,不經常使用

scrollsToTop 是否支持點擊 statusbar回到頂端,默認YES

isTracking // 只讀屬性,判斷滾動視圖是否被觸摸,可能尚未滑動

isDragging // 只讀屬性,判斷滾動視圖是否被滑動,指手未鬆開

isDecelerating // 只讀屬性,判斷是否在減速運動,指手指鬆開後

縮放:

minimumZoomScale

maximumZoomScale

實現UIScrollView的縮放,必須使maximumZoomScale(默認1.0)和minimumZoomScale(默認1.0)不一樣 ,而且須要在delegate中的viewForZoomingInScrollView: 方法中返回須要縮放的view。實現以上便可進行縮放。

pragma mark -

// return a view that will be scaled. if delegate returns nil, nothing happen

  • (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView {
    // 返回哪一個子視圖被縮放
    // 通常來說,不縮放scrollView自己,只縮放返回的子視圖
    return scrollView.subviews[0];
    }
  • (void)scrollViewDidZoom:(UIScrollView *)scrollView;
  • (void)scrollViewDidEndZooming:(UIScrollView )scrollView withView:(UIView )view atScale:(CGFloat)scale;
  • (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

 

// 一旦滾動,就會無條件調用,沒有任什麼時候間點

// 不管手指在拖仍是不在拖

  • (void)scrollViewDidScroll:(UIScrollView *)scrollView;

// 在鬆開手指的那一瞬間被調用

  • (void)scrollViewWillEndDragging:(UIScrollView )scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint )targetContentOffset {
  • // NSLog(@」將要結束滾動」);
  • // NSLog(@」加速度:%f %f」, velocity.x, velocity.y);
  • // NSLog(@」預測停留點:%f %f」, targetContentOffset.x, targetContentOffset.y);
  • // velocity: 加速度
  • // targetContentOffset: 預測將要停留的點
  • }

// 滑動結束,將要開始減速

// 手指離開了,但實際上scrollView並不必定結束了滾動

  • (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
  • ;

// 將要減速

  • (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;

// 減速結束

  • (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

// 結速滾動後調用,要經過代碼讓它滾動時,此方法纔會被調用

  • (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
    NSLog(@」經過代碼滾動結束」);

// 當用戶點出iPhone狀態條時,滾動視圖委託能夠決定視圖是否滾動回到開頭

  • (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView {

    // NSLog(@」已經滾動到頂部」);

頁控制   UIPageControl

//建立一個Scrollview

- (void)createScrollView {

    UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];

    self.scrollView = scrollView;

    self.scrollView.pagingEnabled = YES;

    //設置代理

    scrollView.delegate = self;

    [self.view addSubview:scrollView];

    [self createPageControl];

}

#pragma mark - UIScrollViewDelegate

//結束減速代理

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    //設置pageControl的小圓點

    //contenOfsset   用滾動視圖水平方向的偏移量 除以scrollView的寬度 ,得出當前所在頁面

    NSInteger currentPage = scrollView.contentOffset.x / scrollView.frame.size.width;

    //設置pageControl的選中點

    self.pageControl.currentPage = currentPage;

}

- (void)createPageControl {

    UIPageControl *pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake((self.view.frame.size.width - 300 ) / 2, 500, 300,40)];

    self.pageControl = pageControl;

    [self.view addSubview:pageControl];

    pageControl.numberOfPages = 4;

    //設置小圓點

    pageControl.pageIndicatorTintColor = [UIColor purpleColor];

    //設置選中的小圓點的顏色

    pageControl.currentPageIndicatorTintColor = [UIColor greenColor];

    //添加事件

    [pageControl addTarget:self action:@selector(pageControlPressed:) forControlEvents:UIControlEventValueChanged];

}

//pageControl值發生變化

- (void)pageControlPressed:(UIPageControl*)sender {

    //設置滾動視圖的偏移量

    //獲得水平偏移量

    CGFloat offsetX = sender.currentPage * _scrollView.frame.size.width;

    [_scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];

相關文章
相關標籤/搜索