Ios Swift:从ScrollView更新UIPageControl

Ios Swift:从ScrollView更新UIPageControl,ios,swift,uiscrollview,uipagecontrol,Ios,Swift,Uiscrollview,Uipagecontrol,我似乎在使用UIPageControl时遇到了一些问题 我有一个保存滚动视图的ViewController。此滚动视图加载可以滑动的nib文件。如图所示: 以下是加载以下内容的代码: self.addChildViewController(vc0) self.displayReportView.addSubview(vc0.view) vc0.didMoveToParentViewController(self) var frame1 = vc1.view.frame fra

我似乎在使用UIPageControl时遇到了一些问题

我有一个保存滚动视图的ViewController。此滚动视图加载可以滑动的nib文件。如图所示:

以下是加载以下内容的代码:

self.addChildViewController(vc0)
self.displayReportView.addSubview(vc0.view)
vc0.didMoveToParentViewController(self)
        
var frame1 = vc1.view.frame
frame1.origin.x = self.view.frame.size.width
vc1.view.frame = frame1
self.addChildViewController(vc1)
self.displayReportView.addSubview(vc1.view)
vc1.didMoveToParentViewController(self)

// And so on
...
这很好,因为它们可以正确滚动等

现在,在ViewController(一个拿着scrollview的)上,我添加了代理:

UIScrollViewDelegate
创建了一些变量:

 var frame: CGRect = CGRectMake(0, 0, 0, 0)
 var colors:[UIColor] = [UIColor.redColor(), UIColor.blueColor(), UIColor.greenColor(), UIColor.yellowColor()]
 var pageControl : UIPageControl = UIPageControl(frame: CGRectMake(50, 300, 200, 20))
我添加了一些需要的功能:

func configurePageControl() {
    // The total number of pages that are available is based on how many available colors we have.
    
    self.pageControl.numberOfPages = 4
    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) * displayReportView.frame.size.width
    displayReportView.setContentOffset(CGPointMake(x, 0), animated: true)
}


func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
    
    let pageNumber = round(scrollView.contentOffset.x / scrollView.frame.size.width)
    pageControl.currentPage = Int(pageNumber)
}
现在,当我运行应用程序时,scrollview点将显示,但当我滑动时,它们不会更新

问题: 如何更新点以反映所显示的视图

如果您需要我的代码中的任何其他内容来查看功能,请告诉我


我会将滚动视图替换为
UICollectionView
。这样,您就可以免费获得分页,而且会更好,因为分页将在开箱即用的情况下进行,而无需计算帧偏移量

确保将collectionView.paginabled=true设置为

要获取当前页码,请执行以下操作:
collectionView.indexPathsForVisibleItems().first?.item

要更改页面,请执行以下操作:


collectionView.scrollToItemAtIndexPath(newIndexPath,atScrollPosition:centeredAnglobally,animated:true)

如果您有分页滚动视图,您当然可以执行所描述的操作;我有一个使用此代码的示例:

func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
    let x = scrollView.contentOffset.x
    let w = scrollView.bounds.size.width
    pageControl.currentPage = Int(x/w)
}
除了你的
回合
,这看起来很像你的代码,这让我觉得你的代码应该可以工作。这让我觉得有些东西只是配置错误。这是分页滚动视图吗?您是否记得将此对象作为滚动视图的
委托
?使用日志记录或断点来确保您的
ScrollViewDiEndDecelling
甚至在第一时间被调用


但是,我想指出的是,您所描述的配置实际上是UIPageViewController免费提供给您的配置—一个带有视图控制器视图的滚动视图,再加上一个页面控件—因此您可能希望使用它。

我宁愿找到一种方法来使用我所拥有的。谢谢你的建议,不过,我会考虑下一个应用程序:这是一个可下载的分页水平滚动视图和页面控件示例,因此您可能希望自己尝试一下,然后看看自己的代码有何不同:嗨,Matt,谢谢您的回复。我正在努力让它停止工作,我在太阳穴上的小小虚荣即将破灭。模糊。。。我把项目上传到这里:-你觉得你能看一下并给我一些建议吗?(跪下,祈祷和乞求)如果让你看这个项目是非常厚颜无耻的,那就抱歉了。为了澄清,我试图得到它,这样当用户向左或向右滚动时,页面控件将相应地更新。嗨@JamesG-我下载了你的项目并查看了,正确的答案就在我的答案中。请阅读我(在第二段)所说的话并思考一下!提示:我可以通过在ViewController的
viewdiload
:)中添加一行代码来让您的项目正常工作(即页面控件更新),很抱歉这么固执,但我是一名教师-折磨您学习是我的工作!