在我的应用程序中,我想创建一个用户故事(入职指南),这将是3-4叠可刷卡。用户可以滑动,在最后一个刷卡后,应用程序启动。用户也可以随时随地跳过。
以下类似于我想要的。
预期结果:
您可以在主视图两侧显示一些内容。
我开始使用UIPageViewController
管理这样的登机牌,我成功地做了。 (我有3个单独的视图 - 这些视图提供给我的自定义UIPageViewController
)。我还添加了一个小的刷卡点(你通常在这种入门堆栈的底部看到的)。但是,由于最终我希望我的主视图在此页面视图后面,我开始使用这个tutorial中建议的容器视图。我在主视图中引入了一个containerView,使得它的控制器类成为我自定义的PageViewController类。
虽然我能够模仿我想要的东西,如下所示,我在自定义UIPageViewController
中进行的大多数自定义都无法在此Container View的控制器(现在是我的自定义PageViewController)中使用。
实际结果:
我在自定义UIPageViewController中进行的自定义是:1。底部的滑动(或导航)点。 2.这些点的颜色。 3.背景颜色4.我打算做更多的事情,比如将它的界限改为RoundedRect等。
在Attributes检查器中进行探索时,以下是可用于在任何UIPageViewController中进行更改的属性:
一般来说,UIPageViewController的属性
以下是Container控制器出现的属性,现在实际上应该是UIPageViewController
的子类,不是吗?如您所见,根本没有“页面视图控制器”部分。
我的自定义UIPageViewController的属性(Container的VC不是它的子类)
所以,我正在寻找两件事:
问题:
我的首要任务是更好地了解我的第一个问题。指针肯定会有所帮助。非常感谢你的想法。
使用页面视图控制器可以实现您的目标 - 它将涉及为教程卡创建一个视图控制器,具有清晰,半透明(不透明)的背景。
您希望页面视图控制器填满整个屏幕,因此分页效果不会被裁剪到教程卡的边界。分页以及锁定滚动的方向将允许您有效地解除您的卡片,直到不再存在。
因此,不是使用容器视图,而是将页面视图控制器的背面剥离出来,并将演示文稿设置为“Over Current Context” - 这会使视图控制器隐藏在后面。页面视图控制器将显示您配置的教程卡视图控制器阵列。
教程卡视图控制器也没有背景,但在视图的中心将是一个包含文本和解除按钮的浮动卡。将故事板中的插座连接到自定义教程卡视图控制器,以便您可以使用不同的文本配置多个实例。
在此之后,请确保为视图控制器提供故事板标识符,以便在配置页面视图控制器数据源时对其进行实例化。创建教程卡视图控制器阵列并设置数据源以显示它们。
我不会说这是最好的方式,因为有许多“可刷卡”包提供了这个功能和更多,但为了DIY,这是一个可行的路线。
根据我的需要,这就是我能够做到的。添加详细信息,以防其他人受益。我的主ViewController是我的切入点。在主VC中,我使用了Container VC。我拖入UIPageViewController并创建了三个VC,这些VC将是我的UIPageViewController中的页面。我删除了附带的ContainerView默认控制器。实际上嵌入(嵌入Segue)UIPageViewController到ContainerView(在主VC中)。整个安排如下:
这样我的mainVC可以保留最初的VC。我可以使用角半径缩小我的三个视图,这看起来像一个弹出式排列,就像我需要的那样。我没有使用UIPageViewController使用的默认UIPageControl。相反,我将UIPageViewControl拖入我的主VC(而不是容器VC内)。这样,我就能够添加任何按钮(例如“Skip”),这在使用默认UIPageControl时可能是不可能的。这意味着,我没有在我的UIPageViewController代码中使用这些。
func presentationCount(for pageViewController: UIPageViewController) -> Int {}
func presentationIndex(for pageViewController: UIPageViewController) -> Int {}
为了控制我拖入的新UIPageControl,我在UIPageViewController中引入了委托协议,并使我的主VC遵循协议。然后,当用户滑动页面时,我基本上可以向我的主VC发送消息(UIPageControl是主VC中的插座)。
protocol OnboardingViewControllerDelegate: class {
func onboardingPageViewController(onboardingPageViewController: OnboardingViewController, didUpdatePageCount count: Int)
func onboardingPageViewController(onboardingPageViewController: OnboardingViewController, didUpdatePageIndex index: Int)
}
最后,结果如下,这正是我想要的。如果有人想查看代码,那就是github。
编辑:在视图后面添加了阴影,因此更改了gif。