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

时间:2017-05-04 13:05:28

标签: swift uigesturerecognizer

我的tabbar控制器中有三个选项卡,我想在这些选项卡之间切换,就像tinder使用手指触摸切换选项卡一样。我使用UISwipeGestureRecognizer完成了它,但它与Tinder(约会应用程序)刷不完全相同。 我在其中一个UISwipeGestureRecognizer上添加了Tabbar controller,然后添加了更改tabbar选定索引的函数。但动画不受手指触摸控制。我希望用手指触摸来控制滑动。

2 个答案:

答案 0 :(得分:1)

我认为最好的方法是将所有标签视图放在UIScrollView中。你把它们放在一起。

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

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

在这里,我假设您的每个标签视图都与屏幕尺寸相同。

答案 1 :(得分:0)

我有点迟,但我发现了我的答案 -

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

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

然后我在主UiViewController中添加了一个scrollview

 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($0) })
        _ = views.map({ $0.view.frame.origin =  CGPoint(x: CGFloat(views.index(of: $0)!) * UIScreen.main.bounds.width, y: 0) })
        complete()
    }

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