页面指​​示器不同步 swift

Page Indicator out of sync swift

我有以下 PageViewController class :

class ProjectorPageViewController : UIPageViewController, UIPageViewControllerDataSource {

var randUsed : [String]?

var pageViewMatches : [SingleMatch]? {
    didSet {
       //irrelevant code

        }
        let initialcontroller = viewControlerAtIndex(0)

        let viewControllers = [initialcontroller!]
        setViewControllers(viewControllers, direction: .Forward, animated: true, completion: nil)
    }
}



override func viewDidLoad() {
    super.viewDidLoad()
    dataSource = self
    let pageControl = UIPageControl.appearance()
    pageControl.currentPageIndicatorTintColor = UIColor.whiteColor()
    pageControl.pageIndicatorTintColor = UIColor(red: (69/255.0), green: (209/255.0), blue: (153/255.0), alpha: 1.0)
}


func viewControlerAtIndex(index : Int) -> PageViewContentViewController? {

    if (self.pageUsers!.count == 0 || index >= self.pageUsers!.count) {
        return nil
    }

    let controller = PageViewContentViewController()
    controller.location = pageLocations![index]
    controller.image_name = pageImages![index]
    controller.user_name = pageUsers![index]
    controller.pageIndex = index
    return controller

}


func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
    let curr_index = (viewController as! PageViewContentViewController).pageIndex
    print ("attempting after with index : " + String(curr_index))

    if (curr_index! < pageViewMatches!.count - 1) {
        return viewControlerAtIndex(curr_index! + 1)        }
    else {
        return nil
    }
}

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
    let curr_index = (viewController as! PageViewContentViewController).pageIndex
    print ("attempting before with index : " + String(curr_index))
    if (curr_index! > 0 ) {
        return viewControlerAtIndex(curr_index! - 1)
    }
    else {
        return nil
    }


}



func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
    if let matches = pageViewMatches {

    return matches.count
}
    else {
        return 0
    }
}

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
    return pageViewController.viewControllers!.indexOf((pageViewController.viewControllers?.first)!)!
}



}

问题是,如果我在页面之间滑动得足够快,页面指示器就会变得不同步,并指向错误的页面。如果我以适中的速度滑动,则不会发生这种情况。我看到一个类似的post说解决方案是实现presentationIndexForPageViewController方法,但是从Objective-C翻译这个(除非我翻译有误)并没有解决问题。这是我指的 post:UIPageViewController setViewControllers, UIPageControl not showing right current number

func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
    let vc = pageViewController.viewControllers!.first as! PageViewContentViewController

    return vc.pageIndex
}

你必须 return pageIndex... pageViewController.viewControllers!.indexOf((pageViewController.viewControllers?.first)!)! 不会 return 正确的索引