如何让 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
委托函数中更新页面控件(currentPage
和numberOfPages
)。如果你希望能够点击页面控件切换页面,在创建时添加合适的目标/动作方法,并使用UIPageViewController
的setViewControllers:animated:
方法触发过渡。
为确保UIPageViewController
不会同时显示页面控件,请删除presentationCountForPageViewController:
和presentationIndexForPageViewController:
的实现。
【讨论】:
这听起来很有希望 - 让我试一试并报告:) @bodacious 我意识到我应该提到另一个步骤,即添加一个视图控制器作为另一个视图控制器的子视图 - 尽管您可能已经知道。我将编辑我的答案。以上是关于如何让 UIPageControl 的背景颜色随着页面滑动而改变?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iPad 中正确设置 UIPageControl 大小