如何让 UIPageControl 的背景颜色随着页面滑动而改变?

Posted

技术标签:

【中文标题】如何让 UIPageControl 的背景颜色随着页面滑动而改变?【英文标题】:How can I have the background colour of UIPageControl change along with the page swipe? 【发布时间】:2014-10-16 09:53:00 【问题描述】:

我的应用首次启动时有一个教程屏幕

我希望在用户从一个页面滑动到另一个页面时更改背景颜色。基本上我有这个工作,但页面控件颜色在滑动转换完成之前不会改变。

(在这个屏幕截图中,我在页面 0 和页面 1 之间滚动以显示背景颜色的变化)

如何让页面滚动时背景颜色发生变化?

这是来自我的主视图控制器的代码 - 它在 Rubymotion 中,但您应该能够遵循它:

# ...

def page_control
  page_controller.view.pageControl
end

COLORS = [UIColor.greenColor, UIColor.blueColor, UIColor.orangeColor]

def pageViewController(page_view_controller, didFinishAnimating: finished, previousViewControllers: previous_view_controllers, transitionCompleted: completed)   
   background_color = COLORS[page_control.currentPage % COLORS.size]
   page_control.backgroundColor = background_color
end

# ...

【问题讨论】:

【参考方案1】:

为什么不能直接将 UIPageControl 的 backgroundColor 设置为 clearColor?

【讨论】:

我试过了——它继承了父控制器视图的背景颜色。页面视图不与页面控件重叠 那么为什么不将页面视图重叠到控制器视图的整个高度呢?还是您已经尝试过?【参考方案2】:

我遇到了同样的问题 - 我最终实现了自己的 UIPageControl。在主视图控制器中创建一个新视图,然后将 UIPageViewController 视图和 UIPageControl 添加为子视图,并设置框架,以便页面控件显示在 pageViewController 视图的底部(或您喜欢的任何位置)。

编辑 因为UIPageViewController 被显示为另一个控制器的子视图,所以您必须在将其添加为子视图之前立即调用(从主视图控制器)[self addChildViewController:pageViewController]。然后拨打[pageViewController didMoveToParentViewController:self]。这确保了触摸事件等从主视图控制器传递到页面视图控制器。请参阅Apple Docs。 结束编辑

将页面控件的背景颜色设置为clearColor,从一页到下一页的转换将发生在页面控件“后面”。然后,您可以在pageViewController didFinishAnimating 委托函数中更新页面控件(currentPagenumberOfPages)。如果你希望能够点击页面控件切换页面,在创建时添加合适的目标/动作方法,并使用UIPageViewControllersetViewControllers:animated:方法触发过渡。

为确保UIPageViewController 不会同时显示页面控件,请删除presentationCountForPageViewController:presentationIndexForPageViewController: 的实现。

【讨论】:

这听起来很有希望 - 让我试一试并报告:) @bodacious 我意识到我应该提到另一个步骤,即添加一个视图控制器作为另一个视图控制器的子视图 - 尽管您可能已经知道。我将编辑我的答案。

以上是关于如何让 UIPageControl 的背景颜色随着页面滑动而改变?的主要内容,如果未能解决你的问题,请参考以下文章

当前页面的UIPageControl点大小[重复]

如何在 iPad 中正确设置 UIPageControl 大小

UIPageControl - 如何使背景透明?

UIPageControl 点不可见但框架可见

如何结合 UIScrollview 和 UIPagecontrol 显示不同的视图?

在 ios 5 模拟器中使用时如何更改 UIPageControl 的颜色