页面指​​示器不同步 swift

Posted

技术标签:

【中文标题】页面指​​示器不同步 swift【英文标题】:Page Indicator out of sync swift 【发布时间】:2016-06-26 19:04:12 【问题描述】:

我有以下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 翻译这个(除非我在翻译中犯了错误)并没有解决问题。这是我指的帖子:UIPageViewController setViewControllers, UIPageControl not showing right current number

【问题讨论】:

【参考方案1】:
func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int 
    let vc = pageViewController.viewControllers!.first as! PageViewContentViewController

    return vc.pageIndex

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

【讨论】:

嗨,pageIndex 是什么? 这是视图控制器的自定义属性 (var pageIndex: Int) 来源?在 Apple 文档中找不到它/Xcode 对自动完成也没有帮助。 嗯,它是自定义属性,所以您需要将该变量添加到您的控制器中...... appcoda.com/uipageviewcontroller-storyboard-tutorial 你可以查看这个以获取更多信息

以上是关于页面指​​示器不同步 swift的主要内容,如果未能解决你的问题,请参考以下文章

Swift/iOS8:为啥不显示页面控制指示器?

opengl 打开和关闭垂直同步方法

vsync,hsync,VBLANK

将 Swift 调用同步到基于 C 的线程不安全库

intellij idea on update actionon frame deactivation ||Servlet 页面不同步问题

VGA时序