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
放入其中。然后将一堆UIButton
s 连续放入UIScrollView
,每个都有一个标题,就是你的页面标题。当您点击一个按钮时(您可以通过UIButton
的-addTarget:action:forControlEvents:
获取此事件),您可以将点击的按钮滚动到正确的位置,突出显示它,然后在其下方放置一个小三角形。
有很多可能性。比如说,你可以用UILabel
替换按钮并添加UITapGestureRecognizer
来捕捉用户的点击,或者如果你得到一个很长的页面列表,你可以用UITableView
替换UIScrollView
(当然这会引入一些复杂性)。你只需要选择你最喜欢的并尝试一下。
【讨论】:
非常感谢您的回答......这些想法很完美......我注意到有可能实现一个自定义控件段来实现这个效果,问题'我做不到找到使用类似于 navBar 使用的模式 'push 的动画来更改 viewcontroller 的正确方法。我什至在这个页面上找不到任何使用分段控件更改的教程。一切都“发现”只有两个视图控制器之间控制段的经典变化,但没有什么可以用 pushviewcontroller 改变动画类型 vuewcontroller 我不太了解您的使用场景,也许发布一些代码会有所帮助。在国家地理的例子中,我看到所有的页面看起来都很相似,我认为用UIViewController
子类管理一堆页面视图来实现它是合理的。所以很容易使用[UIView animateWithDuration:animations:]
在每个视图之间制作动画。但是,您可能希望使用UIViewController
来实现它,只管理一个页面,并且它们都位于容器视图控制器中。那不是一个不同的故事。视图控制器本身没有动画。
例如,你有一个 rootViewController 作为容器视图控制器,它有一个 ivar _controllers
,它包含几个 UIViewController
子类,每个子类都管理一个 pageView
。所有的动画技巧都是排列这些pageView
s的帧并执行推送效果。您可以在_controllers
数组中获取相邻的控制器,获取它们的pageView
s,正确设置视图框架并为其设置动画。唯一的区别是您应该自己管理视图控制器的生命周期,可能使用-addChildViewController:
和-removeFromParentViewController
以上是关于UIPageControl 自定义样式 Nat Geo的主要内容,如果未能解决你的问题,请参考以下文章
UIPageControl 自定义类 - 发现 nil 将图像更改为点