2017-04-14 5 views
2

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あなたはそれが可視領域内にあるかどうかをすぐにviewDidAppearを起動しますスクロールビューのコンテンツ領域に置くものは何でも

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

UITableViewが行う方法をロードするコンテンツを管理していないUIScrollViewので、か否か。あなたのアニメーションを開始するとき、あなたは手動で実際にスクロールビューのコンテンツ領域に表示されて何を追跡する必要があるとしているかを決定する

UIScrollViewDelegateを割り当て、そのscrollViewDidScroll()でチェックを行う、どのscrollViewがスクロールしているすべてのフレームと呼ばれます。

scrollView.contentOffsetscrollView.boundsを使用して、関心のあるサブビューのサイズと座標を視認性を判断し、最初に表示されたときにトリガーすることができます。

関連する問題