2017-05-04 68 views
3

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

+0

您是否尝试过'UIPanGestureRecognizer'? – SLearner

+0

你可以建议我'TabBarControllerAnimation'方法来改变'SelectedIndex'使用手指触摸和刷卡? –

回答

0

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

我已经创建了4个UIviewcontrollers编程,然后 创建它的一个阵列。

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($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) 
    } 
1

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

在您的tabbarController中实现滚动视图委托方法。 你可能需要scrollViewDidEndScrollingAnimationscrollViewDidEndDecelerating知道上查看您是当用户停止滚动,像这样:

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

在这里,我想每个选项卡视图中的尺寸与屏幕相同。

+0

这可以使用'UIPanGestureRecognizer'完成吗? –

+0

您不需要带有滚动视图的UIPanGestureRecognizer。 –

+0

我在每个选项卡中有三个不同的'UIViewControllers'。因此将它们添加到'UIScrollView'将会很困难。 –