2016-06-26 9 views
3

私は、次のPageViewControllerクラスを持っている:ページインジケータ迅速

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)!)! 
} 



} 

問題は、私はページ間を十分に速くスワイプすると、ページインジケータが同期してなることである、と間違ったページへのポイント。適度なペースでスワイプすれば、これは起こらない。私は解決策がpresentationIndexForPageViewControllerメソッドを実装することだと言った同様の記事を見てきましたが、これをObjective-Cから翻訳しました(私が翻訳ミスをしない限り)問題を解決しませんでした。ここで私が言及していますポストです:あなたはpageIndexを返さなければなりませんUIPageViewController setViewControllers, UIPageControl not showing right current number

答えて

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

    return vc.pageIndex 
} 

pageViewController.viewControllers!.indexOf((pageViewController.viewControllers?.first)!)!

+0

右のインデックスを返しません...やあ、 'pageIndex'はしかし何ですか? – Cesare

+0

これはView Controller(var pageIndex:Int)のカスタムプロパティです – tbilopavlovic

+0

ソースですか?アップルのマニュアルでそれを見つけることができません/ Xcodeはオートコンプリートで私を助けません。 – Cesare