scrollView實現基礎中心點縮放及與UIPageControl結合使用

meitian 8年前發布 | 10K 次閱讀 Apple Swift開發 UIPageControl

來自: http://www.cnblogs.com/xueyao/p/5185794.html

一般來說scrollView與UIPageControl都是結合使用,因為在使用滾動視圖的時候 ,使用UIPageControl,用戶可以 清楚 的明白顯示的內容有多少頁,如果 沒有的話,總不能讓用戶一個個的去數。用戶體驗效果不理想。

一般來說,在滑動scrollView的時候,UIPageControl的選中點的位置也會有相應的變化。當然,反之來說,改變選中點的位置,相應的scrollView顯示的內容也會產生變化 。

因為我這邊需要實現的效果是:最后一張向后滑動之后,會自動跳到第一張顯示的內容。如果想解決這個,只需要在第一張之前添加一個最后一張的圖片。具體代碼就不展示了。關于改變scrollView,來改變UIPageControl當前的值。

具體的代碼實現。

//在滾動視圖停止滾動時,改變pageControl上面點的位置

  • (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ //獲取滾動視圖當前的偏移量 CGPoint offset = scrollView.contentOffset; //計算偏移量與屏幕寬度的關系,也就是偏移了多少倍 NSInteger page = offset.x / kWidth; self.pageControl.currentPage = page - 1 < 0 ? 9 : page - 1; }</pre>

    那如果改變UIPageControl當前的值,來達到改變scrollView的內容呢。通過對所添加的UIPageControll來設置觸發方法為click

    具體代碼展示。

    //通過點圓點的位置來改變視圖的變化

  • (void)click:(UIPageControl )pageControl{ self.scrollView.contentOffset = CGPointMake(kWidth (pageControl.currentPage + 1), 0); }</pre>

    而對于scrollView來說,如果只設置了一個scrollView的話,我們所達到的效果是不理想的,因為在縮放的同時,也會改變本身的contentSize,所以所達到的效果是不會理想的,也會有很嚴重的惡劣感。當然,想解決這個,也非常的容易 ,只需要在scrollView上添加一個子視圖,一個等大的scrollView,就稱呼為小scrollView,小scrollView用來進行縮放處理,而大scrollView來進行滾動。這樣一來 ,就不會改變大scrollView整體的contentSize.

    小scrollView縮放的具體代碼展示。

    //必須設置縮放比例以及設置代理對象        
    smallScroll.delegate = self;
    smallScroll.minimumZoomScale = 0.5;
    smallScroll.maximumZoomScale = 2.0;
    //指定縮放的視圖

  • (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView{ //return [scrollView.subviews firstObject]; return [scrollView.subviews objectAtIndex:0]; }

//中心點縮放

  • (void)scrollViewDidZoom:(UIScrollView )scrollView{ UIImageView imageV = [scrollView.subviews firstObject]; if (scrollView.zoomScale <= 1.0) {

      imageV.center = CGPointMake(kWidth / 2, kHeight / 2);
    

    } }</pre>

    因為是對小scrollView進行縮放,所以 在進行縮放前,必須要指定進行縮放的視圖是哪一個。 所以 大srcollView的第一個子視圖就是我想要進行縮放的視圖。

    當然,到了這個地步 ,又發現了一個新的問題,滑動到下一頁后,再返回剛剛縮放過的地方,發現還是改變后的圖片,并沒有恢復成原樣。發現問題就應該合理的解決好問題。

    //減速結束,也就是停止滾動

  • (void)scrollViewDidEndDecelerating:(UIScrollView )scrollView{ NSLog(@"結束滾動"); // 先從負責滾動的?scrollView找到他的?子視圖 for (UIScrollView sView in scrollView.subviews){

      // 在根據?子類的對象類型進?行判斷
      if ([sView isKindOfClass:[UIScrollView class]]){
          // 把視圖的尺?寸恢復到原有尺?寸
          sView.zoomScale = 1.0;
      }
    

    } }</pre>

    當然,使用這些方法的前提就是設置好代理.Delegate。

    做到這個地方,基礎的都做完了。不管怎么說。合理的利用方法。發現問題并解決好問題,才是一個新手應該注意的地方。一個方法的使用,并不是單純的只有一個使用方法,多種思路就可能會有不同的解決方式 。scrollView是滾動視圖,使用還是比較簡單,日常使用還是挺頻繁的,而基于scrollView的 UITableView才是日后使用的重點。 api文檔是可以很好的幫助解決了個個方法的介紹。雖然全英文,可能會看不懂。當不看,你永遠不懂,所以要慢慢的,嘗試了解一點。會一點是一點。

    </div>

 本文由用戶 meitian 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!