2017-04-14 48 views
2

我添加了兩個視圖控制器到我的滾動視圖,並在兩個視圖控制器上都有動畫,但這些動畫只能在vc顯示時調用。相反,當第一個vc顯示時,兩個動畫都正在執行。如何將視圖控制器添加到滾動視圖,但只有在滾動視圖顯示vc時才實例化視圖控制器?

func setUpScrollView() { 

     for i in 0..<2 { 
      let vc = NewViewController() 
      self.addChildViewController(vc) 
      scrollView.addSubview(vc.view) 
      vc.didMove(toParentViewController: self) 

      var frame: CGRect = vc.view.frame 
      frame.origin.x = self.view.frame.width * CGFloat(i) 
      vc.view.frame = frame 

      self.scrollView.contentSize = CGSize(width: self.view.frame.width * CGFloat(2), height: self.view.frame.size.height) 
     } 
    } 

NewViewController

override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     print("calling animation") //this is called twice immediatley after for loop, but only shows one vc. 
    } 

回答

2

UIScrollView沒有管理內容加載UITableView的方式做,所以無論你把滾動視圖的內容區域將立即觸發其viewDidAppear無論是在可見光區域或不。

要決定何時開始動畫,你將不得不手動跟蹤什麼是在滾動視圖的內容區域實際可見:

分配UIScrollViewDelegate和做檢查在其scrollViewDidScroll(),這被稱爲scrollView正在滾動的每一幀。

您可以使用scrollView.contentOffsetscrollView.bounds以及您感興趣的子視圖的大小和座標來確定可見性,然後在第一次變爲可見時觸發動畫。

相關問題