2017-11-06 6 views
0

を使用している間、私はストップスタート機能持つ別のビューコントローラ上の音声を停止します。ViewController3でプレイとViewController1ではページのViewController

// Controls Play settings 

func isplay(){ 
    audioPlayerVC2.play() 
} 

func stop(){ 
    audioPlayerVC2.stop() 
} 

:私はストップスタート機能を持っているViewController2で

// Controls Play settings 

func isplay(){ 
    audioPlayerVC1.play() 
} 

func stop(){ 
    audioPlayerVC1.stop() 
} 

を私は停止開始関数を持っています:

// Controls Play settings 

func isplay(){ 
    audioPlayerVC3.play() 
} 

func stop(){ 
    audioPlayerVC3.stop() 
} 

In ViewController4私はstop start func

// Controls Play settings 

func isplay(){ 
    audioPlayerVC4.play() 
} 

func stop(){ 
    audioPlayerVC4.stop() 
} 

audioPlayerVCを使用すると、各ビューコントローラーでバックグラウンドミュージックを停止して開始できます。私が探しているのは、これを私のページビューコントローラーに組み込むことです。ユーザーがビューコントローラー間で左右にスワイプすると、音楽はその特定のビューコントローラーを開始および停止します。私は、ページビューコントロールでif else文を作成する必要があると思います。なぜなら、音楽はすべてのビューコントローラから現時点で再生されるからです。ここでpageviewcontrollerのためのコードです:ユーザーがあるページから別のページに移行しているとき

import UIKit 

class PageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource { 


    var pageControl = UIPageControl() 

    // MARK: UIPageViewControllerDataSource 

    lazy var orderedViewControllers: [UIViewController] = { 
     return [self.newVc(viewController: "View1"), 
       self.newVc(viewController: "View2"), 
       self.newVc(viewController: "View3"), 
       self.newVc(viewController: "View4")] 
    }() 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.dataSource = self 
     self.delegate = self 



     // This sets up the first view that will show up on our page control 
     if let firstViewController = orderedViewControllers.first { 
      setViewControllers([firstViewController], 
           direction: .forward, 
           animated: true, 
           completion: nil) 
     } 


    } 

    func newVc(viewController: String) -> UIViewController { 
     return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: viewController) 
    } 


    // MARK: Delegate methords 
    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { 
     let pageContentViewController = pageViewController.viewControllers![0] 
     self.pageControl.currentPage = orderedViewControllers.index(of: pageContentViewController)! 
    } 

    // MARK: Data source functions. 
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 
     guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else { 
      return nil 
     } 

     let previousIndex = viewControllerIndex - 1 

     // User is on the first view controller and swiped left to loop to 
     // the last view controller. 
     guard previousIndex >= 0 else { 
      return orderedViewControllers.last 
      // Uncommment the line below, remove the line above if you don't want the page control to loop. 
      // return nil 
     } 

     guard orderedViewControllers.count > previousIndex else { 
      return nil 
     } 

     return orderedViewControllers[previousIndex] 
    } 

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { 
     guard let viewControllerIndex = orderedViewControllers.index(of: viewController) else { 
      return nil 
     } 

     let nextIndex = viewControllerIndex + 1 
     let orderedViewControllersCount = orderedViewControllers.count 

     // User is on the last view controller and swiped right to loop to 
     // the first view controller. 
     guard orderedViewControllersCount != nextIndex else { 
      return orderedViewControllers.first 
      // Uncommment the line below, remove the line above if you don't want the page control to loop. 
      // return nil 
     } 

     guard orderedViewControllersCount > nextIndex else { 
      return nil 
     } 

     return orderedViewControllers[nextIndex] 
    } 


} 

答えて

0

は知っているが、pageViewController(_:didFinishAnimating:previousViewControllers:transitionCompleted:)を実装します。そのメソッドの実装ですべての作業を行います。 previousViewControllerパラメータは、どのビューコントローラが表示されたかを示します。が表示されているため、再生を停止するよう指示できます。ページビューコントローラーのviewControllersプロパティは、表示コントローラーがどのように表示されているかを示します。なので、にはと表示されます。これらは、はるかに(隣接するページをキャッシュするために)実際のページめくりの前に呼ばれ、あなたのページがあるときについては何も教えていないよう

ドゥは、viewControllerAfterまたはviewControllerBeforeでの作業のいずれかを実行していませんどのページが表示されているかを確認します。