UIPageControl 自定义样式 Nat Geo

Posted

技术标签:

【中文标题】UIPageControl 自定义样式 Nat Geo【英文标题】:UIPage Control custom style NatGeo 【发布时间】:2014-06-28 16:13:57 【问题描述】:

在我的应用程序中,我有 UIView,它通过使用水平滚动视图来流动。为了滚动视图,我使用了 classimo 方法[self addChildViewController: [self.storyboard instantiateViewControllerWithIdentifier: @ "name Storyboard ID"]];

每个 UIView 都使用 UIPageControl 经典,但我不喜欢它,所以我想创建这样的东西(见图)

从上面的应用程序中可以看到,有一个带有向下三角形的菜单,指示页面,通过滚动视图上的水平滑动从一个主题传递给另一个用户

换句话说,国家地理没有使用经典镜头来管理页面,而是使用了一个向下的三角形和用户所在页面的标题......

有人可以帮助我了解如何创建类似的 PageControl 吗?

【问题讨论】:

【参考方案1】:

有很多方法可以实现这一点。也许自定义 PageControl 不会是 UIPageControl 的子类。 例如,您可以将UIView 子类化,并将UIScrollView 放入其中。然后将一堆UIButtons 连续放入UIScrollView,每个都有一个标题,就是你的页面标题。当您点击一个按钮时(您可以通过UIButton-addTarget:action:forControlEvents: 获取此事件),您可以将点击的按钮滚动到正确的位置,突出显示它,然后在其下方放置一个小三角形。 有很多可能性。比如说,你可以用UILabel替换按钮并添加UITapGestureRecognizer来捕捉用户的点击,或者如果你得到一个很长的页面列表,你可以用UITableView替换UIScrollView(当然这会引入一些复杂性)。你只需要选择你最喜欢的并尝试一下。

【讨论】:

非常感谢您的回答......这些想法很完美......我注意到有可能实现一个自定义控件段来实现这个效果,问题'我做不到找到使用类似于 navBar 使用的模式 'push 的动画来更改 viewcontroller 的正确方法。我什至在这个页面上找不到任何使用分段控件更改的教程。一切都“发现”只有两个视图控制器之间控制段的经典变化,但没有什么可以用 pushviewcontroller 改变动画类型 vuewcontroller 我不太了解您的使用场景,也许发布一些代码会有所帮助。在国家地理的例子中,我看到所有的页面看起来都很相似,我认为用UIViewController 子类管理一堆页面视图来实现它是合理的。所以很容易使用[UIView animateWithDuration:animations:] 在每个视图之间制作动画。但是,您可能希望使用UIViewController 来实现它,只管理一个页面,并且它们都位于容器视图控制器中。那不是一个不同的故事。视图控制器本身没有动画。 例如,你有一个 rootViewController 作为容器视图控制器,它有一个 ivar _controllers,它包含几个 UIViewController 子类,每个子类都管理一个 pageView。所有的动画技巧都是排列这些pageViews的帧并执行推送效果。您可以在_controllers 数组中获取相邻的控制器,获取它们的pageViews,正确设置视图框架并为其设置动画。唯一的区别是您应该自己管理视图控制器的生命周期,可能使用-addChildViewController:-removeFromParentViewController

以上是关于UIPageControl 自定义样式 Nat Geo的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UIPageControl 的位置

带有点图像的自定义 UIPageControl

UIPageControl 自定义类 - 发现 nil 将图像更改为点

自定义 UIPageControl 点在加载时错位

具有 UIPageControl 性能问题的自定义 UIScrollview

如何在 iOS 4 中调整 UIPageControl 的指标?