2015-02-24 34 views
0

我想使用scrollView進行滑動效果,我找到了一個項目,其中沒有在代碼或故事板中專門調用任何東西。我重複了代碼,但在我的項目中,scrollView只是連續滑動,它不會從一個imageView滑動到另一個。你會知道如何做到這一點?如何使頁面控制刷卡效果?滾動視圖連續滑動到目前爲止

這裏是代碼,滾動響應觸摸,pagecontrol是一個簡單的iboutlet,但沒有滑動效果(滾動停止觸摸結束的位置,而不是返回或移動整個imageview):

class ViewController: UIViewController, UIScrollViewDelegate { 

    @IBOutlet weak var pageControl: UIPageControl! 
    @IBOutlet weak var scrollView: UIScrollView! 

    var pageViews: [UIImageView?] = [] 
    var pageImages : [UIImage?] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     pageImages = [UIImage(named:"photo1.png"), 
     UIImage(named:"photo2.png"), 
     UIImage(named:"photo3.png"), 
     UIImage(named:"photo4.png")] 

     let pageCount = pageImages.count 
     pageControl.currentPage = 0 
     pageControl.numberOfPages = pageCount 

     for _ in 0..<pageCount { 
      pageViews.append(nil) 
     } 

     let pagesScrollViewSize = scrollView.frame.size 
     println("pagesScrollViewSize : \(pagesScrollViewSize)") 
     scrollView.contentSize = CGSizeMake(pagesScrollViewSize.width * CGFloat(pageCount), pagesScrollViewSize.height) 
     loadVisiblePages() 
    } 

    //when scrolling 
    func scrollViewDidScroll(scrollView: UIScrollView!){ 
     loadVisiblePages() 
    } 

    func loadVisiblePages(){ 
     let pageWidth = scrollView.frame.size.width 
     let page = Int(floor((scrollView.contentOffset.x * 2.0 + pageWidth)/(pageWidth*2.0))) 
     println("page: \(page)") 
     pageControl.currentPage = page 
     let firstPage = page-1 
     let lastPage = page+1 
     //remove all the pages before firstPage 
     for var index = 0; index < firstPage; ++index{ 
      purgePage(index) 
     } 
     //load pages in our range 
     for var index = firstPage; index <= lastPage; ++index { 
      loadPage(index) 
     } 
     //remove after lastPage 
     for var index = lastPage+1; index < pageImages.count; ++index { 
      purgePage(index) 
     } 
    } 

    func loadPage(index:Int){ 
     if index < 0 || index >= pageImages.count { 
      return 
     } 
     if let pageView = pageViews[index] { 
      //already loaded 
     } 
     else { 
      var frame = scrollView.bounds 
      frame.origin.x = frame.size.width * CGFloat(index) 
      frame.origin.y = 0.0 
      println("\(frame)") 

      var newImageView = UIImageView(image:pageImages[index]) 
      newImageView.contentMode = .ScaleAspectFit 
      newImageView.frame = frame 
      scrollView.addSubview(newImageView) 

      pageViews[index] = newImageView 
     } 
    } 

    func purgePage(index:Int){ 
     if index < 0 || index >= pageImages.count { 
      return 
     } 
     if let pageView = pageViews[index] { 
      pageView.removeFromSuperview() 
      pageViews[index] = nil 
     } 
    } 

} 

回答

2

UIPageControl不做頁滾動行爲 - 它僅提供指示顯示的頁面(並且用戶可以點擊頁面之間跳轉)點。使用UIScrollViewpagingEnabled屬性按頁滾動而不是連續滾動。

或者只是使用UIPageViewController來獲得所有爲您處理的滾動和分頁業務。

+0

很好,謝謝。 – Paul 2015-02-24 21:29:29

相關問題