2016-12-22 18 views
5

Użyłem tego niesamowitego samouczka How to Use UIPageViewController in Swift, aby zrozumieć i zaimplementować UIPageViewController w mojej aplikacji.Jak używać UIPageViewController do wyświetlania części poprzedniego i następnego widoku

Pomyślnie zakończyłem integrację, ale teraz muszę trochę zmodyfikować to zachowanie.

Zamiast oglądać tylko jeden kolorowy widok na raz, chciałbym zobaczyć 25% poprzedniego widoku i 25% następnego.

enter image description here

Chyba muszę użyć tej metody, przekazując 3 viewcontrollers:

func setViewControllers(_ viewControllers: [UIViewController]?, 
      direction: UIPageViewControllerNavigationDirection, 
      animated: Bool, 
     completion: ((Bool) -> Void)? = nil) 

... ale nie wiem jak to zrobić

Odpowiedz

0

Jest to łatwo osiągalne, kiedy utworzyłeś UIPageviewcontroller z przewijaniem. Tak, możesz użyć UIScrollView, aby pokazać go jak pageviewcontroller. Teraz wyświetlacz rect (w twoim przypadku bieżący ekran + 25% drugiego ekranu) jest w twoich rękach.

Poniżej znajduje się kod dla tego.

import UIKit 

class ViewController: UIViewController,UIScrollViewDelegate { 

    let scrollView = UIScrollView(frame: CGRectMake(0, 0, 320, 300)) 
    var colors:[UIColor] = [UIColor.redColor(), UIColor.blueColor(), UIColor.greenColor(), UIColor.yellowColor()] 
    var frame: CGRect = CGRectMake(0, 0, 0, 0) 
    var pageControl : UIPageControl = UIPageControl(frame: CGRectMake(50, 300, 200, 50)) 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     configurePageControl() 

     scrollView.delegate = self 
     self.view.addSubview(scrollView) 
     for index in 0..<4 { 

      frame.origin.x = self.scrollView.frame.size.width * CGFloat(index) 
      frame.size = self.scrollView.frame.size 
      self.scrollView.pagingEnabled = true 

      var subView = UIView(frame: frame) 
      subView.backgroundColor = colors[index] 
      self.scrollView .addSubview(subView) 
     } 

     self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * 4, self.scrollView.frame.size.height) 
     pageControl.addTarget(self, action: Selector("changePage:"), forControlEvents: UIControlEvents.ValueChanged) 

      } 

    func configurePageControl() { 
     // The total number of pages that are available is based on how many available colors we have. 
     self.pageControl.numberOfPages = colors.count 
     self.pageControl.currentPage = 0 
     self.pageControl.tintColor = UIColor.redColor() 
     self.pageControl.pageIndicatorTintColor = UIColor.blackColor() 
     self.pageControl.currentPageIndicatorTintColor = UIColor.greenColor()  
     self.view.addSubview(pageControl) 

     } 

    // MARK : TO CHANGE WHILE CLICKING ON PAGE CONTROL 
    func changePage(sender: AnyObject) ->() { 
     let x = CGFloat(pageControl.currentPage) * scrollView.frame.size.width 
     scrollView.setContentOffset(CGPointMake(x, 0), animated: true) 
    } 

    func scrollViewDidEndDecelerating(scrollView: UIScrollView) { 

     let pageNumber = round(scrollView.contentOffset.x/scrollView.frame.size.width) 
     pageControl.currentPage = Int(pageNumber) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

Oto ładny samouczek, który Ci w tym pomoże. Custom PageView Controller with scrollview

+0

Więc najlepszym rozwiązaniem jest nie używać UIPageViewController, ale para UIViewController/UIScrollViewDelegate zamiast? – cmii