Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用手指滑动更改选项卡栏控制器中的选项卡_Swift_Uigesturerecognizer - Fatal编程技术网

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

Swift 使用手指滑动更改选项卡栏控制器中的选项卡,swift,uigesturerecognizer,Swift,Uigesturerecognizer,我的tabbar控制器中有三个选项卡,我想在这些选项卡之间切换,就像tinder使用手指触摸切换选项卡一样。我使用了UISweepGestureRecognitizer,但它与Tinder(约会应用程序)的刷卡功能并不完全相同。 我在其中一个选项卡栏控制器上添加了UISweepGestureRecognitor,然后添加了更改选项卡栏所选索引的功能。但动画不是由手指触摸控制的。我希望刷卡应该由手指触摸控制。我认为最好的方法是将所有选项卡视图放在UIScrollView中。你把它们放在一起 在ta

我的tabbar控制器中有三个选项卡,我想在这些选项卡之间切换,就像tinder使用手指触摸切换选项卡一样。我使用了
UISweepGestureRecognitizer
,但它与Tinder(约会应用程序)的刷卡功能并不完全相同。
我在其中一个选项卡栏控制器上添加了
UISweepGestureRecognitor
,然后添加了更改选项卡栏所选索引的功能。但动画不是由手指触摸控制的。我希望刷卡应该由手指触摸控制。

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

tabbarController
中实现滚动视图委托方法。 您可能需要
ScrollViewDiEndScrollingAnimation
ScrollViewDiEndDecreating
才能知道用户停止滚动时您在哪个视图上,如下所示:

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

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

我有点晚了,但我发现我的ans-

我已经通过编程创建了4个UIViewController 创建了一个数组

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)
    }

您是否尝试过
UIPanGestureRecognizer
?您可以建议我使用手指触摸和滑动来更改
SelectedIndex
UIPanGestureRecognizer
方法吗?您不需要带滚动视图的
UIPanGestureRecognizer
。我在每个选项卡中都有三个不同的
UIViewController
。因此,将它们添加到
UIScrollView
将非常困难。您可以放置3个容器来容纳视图控制器。除了在
Tabbar controller
中添加
UIScrollView
之外,还有其他方法吗?如果您希望在视图之间进行平滑且响应迅速的滚动,我不这么认为。