2017-12-01 11 views
0

私はscrollViewを使用してビューをスワイプしますが、4番目のビューに到達してスワイプしても何もしません。私がしたいことは、4番目のビューで左にスワイプすると1番目のビューに戻り、1番目のビューにいるときに右にスワイプして4番目のビューに戻ることですすべての連続しているようにしてください。メインビューのコントローラーのコードと、1番目のビューのコードを以下に示します。スクロールビューを繰り返して続行します

class MeditationScreenViewController: UIViewController { 

    //MARK: - 
    //MARK: Nested Types 

    //MARK: - 
    //MARK: IBOutlets 


    @IBOutlet var scrollView: UIScrollView! 

    //MARK: View Controller Lifecycle 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let V1 : View1 = View1(nibName: "View1", bundle: nil) 

     let V2 : View2 = View2(nibName: "View2", bundle: nil) 

     let V3 : View3 = View3(nibName: "View3", bundle: nil) 

     let V4 : View4 = View4(nibName: "View4", bundle: nil) 

     self.addChildViewController(V1) 
     self.scrollView.addSubview(V1.view) 
     V1.didMove(toParentViewController: self) 

     self.addChildViewController(V2) 
     self.scrollView.addSubview(V2.view) 
     V2.didMove(toParentViewController: self) 


     self.addChildViewController(V3) 
     self.scrollView.addSubview(V3.view) 
     V3.didMove(toParentViewController: self) 

     self.addChildViewController(V4) 
     self.scrollView.addSubview(V4.view) 
     V4.didMove(toParentViewController: self) 

     var V2Frame : CGRect = V1.view.frame 
     V2Frame.origin.x = self.view.frame.width 
     V2.view.frame = V2Frame 

     var V3Frame : CGRect = V3.view.frame 
     V3Frame.origin.x = 2 * self.view.frame.width 
     V3.view.frame = V3Frame 

     var V4Frame : CGRect = V4.view.frame 
     V4Frame.origin.x = 3 * self.view.frame.width 
     V4.view.frame = V4Frame 

     self.scrollView.contentSize = CGSize(width: self.view.frame.width * 4, height: self.view.frame.height) 

} 
} 

第一コードの表示

​​
+2

「UIPageViewController」の機能を再作成しました。それには無限のスクロール能力などがあります。代わりにそれを使用してください。 – the4kman

+0

ありがとうございました.UIPageViewControllerを使ってもっとうまく機能しました。 –

答えて

0

私はページビューコントローラを作成し、ビューコントローラにUIViewsを変更して、下図のようにビューコントローラにページビューコントローラをリンクして繰り返すように実装View Controllerを継続的に使用します。

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] 
    } 


} 
関連する問題