我试图实现在两个视图控制器之间滚动,一个是消息页面,另一个视图控制器是相机页面,类似于snapchat应用程序。如果我没有让自己理解,我附加了一个图像与应用程序有完全相同的实现,因为我想做的,它有5个视图,你可以在它们之间滚动。图像现在我已经尝试了多种方法来实现它。其中之一是UIPageViewController,我的代码片段:
class ViewController: UIViewController , UIPageViewControllerDelegate
{
var chatVC = one()
var cameraVC= two()
var array = [UIViewController]()
var arr = [UIViewController]()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
self.array = [chatVC,cameraVC]
self.arr = [chatVC]
DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
self.presentPageVC()
})
}
func presentPageVC(){
var vc = UIPageViewController.init(transitionStyle: .scroll, navigationOrientation: .horizontal , options: nil)
vc.delegate = self
vc.dataSource = self
vc.setViewControllers(self.arr, direction: .forward, animated: true, completion: nil)
self.present(vc, animated: true, completion: nil)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let index = self.array.firstIndex(of: viewController),index>0 else {return nil}
let beforeIndex = index - 1
return self.array[beforeIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let index = self.array.firstIndex(of: viewController), index < (self.array.count-1) else {
return nil
}
var indexAfter = index + 1
return self.array[indexAfter]
}
有了这个实现,我有一个问题,因为我试图在cameraVC上的最后一页后滚动,在右边出现了它背后的视图。我怎么能关闭滚动当没有其他页面后或之前。另外,我是软件开发新手,如果有人有更好的实现方法,请告诉我。我在尝试实现UICollectionView时卡住了,因为我不知道如何将UIViewController转换为cell,以及如何根据委托进行改变。以及当尝试通过UIScrollView添加,我不明白我怎么能一个UIViewController子视图到UIScrollView,因为它只接受UIView。提前感谢您的帮助,
如果有人想让UIScrollView在滚动时不显示viewUnder,那就没有视图可以滚动了
scrollView.showsLargeContentViewer = false