使用手指滑动更改选项卡栏控制器中的选项卡

Change tab in tab bar controller using finger swipe

我的标签栏控制器中有三个标签,我想在这些标签之间切换,就像 tinder 使用手指触摸切换标签一样。我已经使用 UISwipeGestureRecognizer 完成了它,但它与 Tinder(约会应用程序)滑动不完全相同。 我在 Tabbar controller 之一上添加了 UISwipeGestureRecognizer,然后添加了更改选项卡栏选定索引的功能。但动画不是由手指触摸控制的。我希望滑动应该通过手指触摸来控制。

我认为最好的方法是将所有选项卡视图放在 UIScrollView 中。你把它们并排放置。

在您的 tabbarController 中实现滚动视图委托方法。 您可能需要 scrollViewDidEndScrollingAnimationscrollViewDidEndDecelerating 来了解当用户停止滚动时您在哪个视图上,如下所示:

let page_width=UIScreen.main.bounds.width
let page=Int(floor((scrollView.contentOffset.x-page_width/2)/page_width)+1)

在这里,我假设您的每个选项卡视图都与屏幕大小相同。

我来晚了,但我找到了答案 -

我以编程方式创建了 4 个 UIviewcontroller,然后 创建了一个数组。

var views = [CareTeamTableViewController(),VFCChatQViewController(), NewAccountViewController(), ShareViewController()]

然后我在主 UiViewController 中添加了一个滚动视图

 private func initMainScroll() {
        scrollView = UIScrollView.init()
        scrollView?.delegate = self
        scrollView?.showsHorizontalScrollIndicator = false
        scrollView?.isPagingEnabled = true
        self.view.addSubview(scrollView!)
    }

然后添加视图数组,如:

func setupScrollView(complete:()->()) {
        scrollView?.frame = views.first!.view.frame
        scrollView?.contentSize = CGSize(width: CGFloat(views.count) * UIScreen.main.bounds.width, height: 0)
        _ = views.map({ addViewToScrollView([=12=]) })
        _ = views.map({ [=12=].view.frame.origin =  CGPoint(x: CGFloat(views.index(of: [=12=])!) * UIScreen.main.bounds.width, y: 0) })
        complete()
    }

    func addViewToScrollView(_ viewController: UIViewController) {
        scrollView?.addSubview(viewController.view)
        viewController.willMove(toParentViewController: self)
        addChildViewController(viewController)
    }