2017-05-07 7 views
0

ページビューコントローラ内に埋め込まれた3つのビューを持つオープニングシーンを作成しようとしています。目標はInstagramのようなものを作成して、中にソーシャルメディアフィードを置いてから、右にスワイプするとビューに移動し、左にスワイプすると別のビューに移動します。しかし、私の現在のコードでは、ビューコントローラは無限にスワイプし、誰かがこれを修正する方法を知っていたのだろうかと思っていました。ここでページビューコントローラの設定で無限ループを取り出す

は私の現在の設定がどのように見えるかです:ここでは Current Setup of Page Views

は、私はそれが見えるようにする方法である:ここでは What I want the functionality to be

私のページビューコントローラのコードです。私は他の2つのビューをリンクするメインページビューコントローラがあります。

class HomeRootPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { 

    lazy var viewControllerArray: [UIViewController] = { 
     return [self.ViewControllerInstance(name: "FeedViewController"), 
       self.ViewControllerInstance(name: "DMViewController"), 
       self.ViewControllerInstance(name: "ProfileViewController")] 
    }() 

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

    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.dataSource = self 
     self.delegate = self 

     if let firstViewController = viewControllerArray.first { 
      setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil) 
     } 
    } 


    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 

     guard let viewControllerIndex = viewControllerArray.index(of: viewController) else { 
      return nil 
     } 

     let previousIndex = viewControllerIndex - 1 

     guard previousIndex >= 0 else { 
      return viewControllerArray.last 
     } 

     guard viewControllerArray.count > previousIndex else { 
      return nil 
     } 

     return viewControllerArray[previousIndex] 

    } 

    public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { 

     guard let viewControllerIndex = viewControllerArray.index(of: viewController) else { 
      return nil 
     } 

     let nextIndex = viewControllerIndex + 1 

     guard nextIndex < viewControllerArray.count else { 
      return viewControllerArray.first 
     } 

     guard viewControllerArray.count > nextIndex else { 
      return nil 
     } 

     return viewControllerArray[nextIndex] 

    } 

} 

助けていただけたら幸いです!

答えて

0

この削除:

guard previousIndex >= 0 else { 
    return viewControllerArray.last 
} 

そして、この:コードのこれらの2ブロック

guard nextIndex < viewControllerArray.count else { 
    return viewControllerArray.first 
} 

を、あなたのviewControllersをループする責任があります。削除するだけで、探している結果が得られます。

+0

この行にクラッシュを引き起こす:return viewControllerArray [previousIndex]。エラーは致命的なエラーを示します:インデックスが範囲外です。 –

+0

たぶん、viewControllerArray.lastとviewControllerArray.firstの位置を反転します。インデックスが0よりも小さい場合、最後のページではなく最初のページを表示したい場合は – Nitrousjp

+0

または単にnilを返します – Nitrousjp