2016-11-04 2 views
2

여기 내 문제는 pageViewController 구현을 사용할 때 스 와이프 동작입니다. 오른쪽에서 왼쪽으로 가고 싶지만, 왼쪽에서 오른쪽으로 가면서 UI 경험이 자연스럽지 않습니다!스 와이프 방향 PageViewController

Xcode 7 및 Swift 2.2를 사용할 때 완벽하게 작동했습니다 ... Xcode 8 제안을 사용하여 내 코드를 복사/붙여 넣기 한이 이상한 동작이 있습니다.

import UIKit 

class FirstEventViewController: UIViewController { 

    // FIXME: - The swipe gesture has to be from right to left when the view appears (PageControl not showing) 
    var pageViewController: UIPageViewController! 
    var titleEvents = [String]() 
    var pageImages: NSArray! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     pageImages = NSArray(objects: "supersmashbros","spiritodjsession","thomasdelortrio") 
     titleEvents = ["supersmashbros","spiritodjsession","thomasdelortrio"] 

     initiatePgVC() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 


    // MARK: - Navigation 

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     //TODO: CODE HERE 
    } 

    // MARK: - Private functions 
    /** 
    Function initializing the logic of the pageviewController 
    */ 

    func initiatePgVC() { 
     pageViewController = UIStoryboard(name:"Main", bundle:nil).instantiateViewController(withIdentifier: "PageViewController") as! UIPageViewController 
     pageViewController.dataSource = self 

     let startVC = viewControllerAtIndex(index: 0) 
     let viewControllers = NSArray(object: startVC) as! [UIViewController] 

     pageViewController.setViewControllers(viewControllers, direction: .forward, animated: true, completion: nil) 

     //pageViewController.view.frame = CGRect(x:0, y:65, width:self.view.frame.width, height:self.view.frame.size.height - 140) 
     pageViewController.view.frame = self.view.bounds 

     addChildViewController(pageViewController) 
     view.addSubview(pageViewController.view) 
     pageViewController.didMove(toParentViewController: self) 
    } 

    /** 
    Function associating the viewControllers 
    */ 
    func viewControllerAtIndex(index: Int)->SecondEventViewController{ 
     if ((titleEvents.count == 0) || (index >= titleEvents.count)){ 
      return SecondEventViewController() 
     } 

     let vc:SecondEventViewController = storyboard?.instantiateViewController(withIdentifier: "SecondEventViewController") as! SecondEventViewController 

     vc.imageFile = pageImages[index] as! String 
     vc.labelTitle = titleEvents[index] 
     vc.pageIndex = index 

     return vc 
    } 
    } 

    extension FirstEventViewController:UINavigationBarDelegate{ 
     func position(for bar: UIBarPositioning) -> UIBarPosition { 
      return .topAttached 
     } 
     } 

    extension FirstEventViewController:UIPageViewControllerDataSource{ 
     func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { 
      let vc = viewController as! SecondEventViewController 
      var index = vc.pageIndex as Int 
      if (index == 0 || index == NSNotFound){ 
       return nil 
      } 

     index = index-1 
     return viewControllerAtIndex(index: index) 
    } 

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 
     let vc = viewController as! SecondEventViewController 
     var index = vc.pageIndex as Int 
     if (index == NSNotFound){ 
      return nil 
     } 

     index = index+1 
     if (index == titleEvents.count){ 
      return nil 
     } 
     return viewControllerAtIndex(index: index) 

    } 

    func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { 
     return titleEvents.count 
    } 

    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { 
     return 0 
    } 

} 

은 (는) 방향을 구현하기 때문에 한 번 pageViewController.setViewControllers(viewControllers, direction: .forward, animated: true, completion: nil) 의심하지만 역으로 변경하는 경우에도 아무 일도 발생하지 않습니다.

답변

3

인덱스를 잘못 변경 한 적이 있습니까?

이후 컨트롤러에 대해서는 인덱스가 증가 할 것으로 예상하지만 그 반대의 경우도 마찬가지입니다.

은 + 1이되어야 후, 그래서 이러한 교환 시도하기 전에 -1 거의

index = index+1 
+0

그래. 너 나 한테 단서를 주었다. 실제로 저는 두 가지 방법을 바꿔야했습니다. 내 viewControllerAfter는 내 viewController가되었습니다. 이전과는 달리, 잘못된 인덱스가있었습니다. – Skull0ne

관련 문제