2017-04-14 67 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以及您感兴趣的子视图的大小和坐标来确定可见性,然后在第一次变为可见时触发动画。

相关问题