使用手指滑动更改选项卡栏控制器中的选项卡
Change tab in tab bar controller using finger swipe
我的标签栏控制器中有三个标签,我想在这些标签之间切换,就像 tinder 使用手指触摸切换标签一样。我已经使用 UISwipeGestureRecognizer
完成了它,但它与 Tinder(约会应用程序)滑动不完全相同。
我在 Tabbar controller
之一上添加了 UISwipeGestureRecognizer
,然后添加了更改选项卡栏选定索引的功能。但动画不是由手指触摸控制的。我希望滑动应该通过手指触摸来控制。
我认为最好的方法是将所有选项卡视图放在 UIScrollView
中。你把它们并排放置。
在您的 tabbarController
中实现滚动视图委托方法。
您可能需要 scrollViewDidEndScrollingAnimation
和 scrollViewDidEndDecelerating
来了解当用户停止滚动时您在哪个视图上,如下所示:
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)
}
我的标签栏控制器中有三个标签,我想在这些标签之间切换,就像 tinder 使用手指触摸切换标签一样。我已经使用 UISwipeGestureRecognizer
完成了它,但它与 Tinder(约会应用程序)滑动不完全相同。
我在 Tabbar controller
之一上添加了 UISwipeGestureRecognizer
,然后添加了更改选项卡栏选定索引的功能。但动画不是由手指触摸控制的。我希望滑动应该通过手指触摸来控制。
我认为最好的方法是将所有选项卡视图放在 UIScrollView
中。你把它们并排放置。
在您的 tabbarController
中实现滚动视图委托方法。
您可能需要 scrollViewDidEndScrollingAnimation
和 scrollViewDidEndDecelerating
来了解当用户停止滚动时您在哪个视图上,如下所示:
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)
}