当用户直接点击标签栏项目时,如何禁用滑动动画?

Posted

技术标签:

【中文标题】当用户直接点击标签栏项目时,如何禁用滑动动画?【英文标题】:How do I disable swipe animation when user directly tap on tab bar item? 【发布时间】:2019-06-18 06:18:04 【问题描述】:

在我的项目中,我启用了一个名为“SwipeableTabBarController”的 coacopods。这些允许我的标签栏视图控制器检测平移手势并在标签之间切换。而且我还编写了一些代码来检测滑动手势,它允许用户隐藏标签栏。 问题:即使用户直接点击栏项目,我的应用也会有幻灯片动画。有什么办法可以解决这个问题?感谢您的帮助!

在检测到点击时尝试禁用滑动和平移手势。但是平移手势不在我的手势数组中。

【问题讨论】:

【参考方案1】:

使用isSwipeEnabled = false 禁用滑动功能。默认在SwipeableTabBarController中设置为true

更新:

因为您正在寻找没有SwipeableTabBarController 库提供的动画的解决方案,但仍需要滑动功能。以下是使用默认 UITabBarController 执行此操作的方法。

第 1 步: 创建一个默认的 UITabBarController 和 2 个视图控制器,我们称它们为 ViewController_1ViewController_2

第 2 步: 为每个ViewController 创建一个类,并在ViewController_1ViewController_2ViewDidLoad() 方法中添加这些行。

override func viewDidLoad() 
    super.viewDidLoad()

    let swipeRight = UISwipeGestureRecognizer(target: self, action:  #selector(swiped))
    swipeRight.direction = UISwipeGestureRecognizer.Direction.right
    self.view.addGestureRecognizer(swipeRight)

    let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(swiped))
    swipeLeft.direction = UISwipeGestureRecognizer.Direction.left
    self.view.addGestureRecognizer(swipeLeft)


然后每次在两个类中检测到滑动时添加此函数。

@objc  func swiped(_ gesture: UISwipeGestureRecognizer) 
    if gesture.direction == .left 
        if (self.tabBarController?.selectedIndex)! < 2
        
            self.tabBarController?.selectedIndex += 1
        
     else if gesture.direction == .right 
        if (self.tabBarController?.selectedIndex)! > 0 
            self.tabBarController?.selectedIndex -= 1
        
    

这将使您能够滑动和导航到不同的 ViewController,还可以使用 Tabbar 按钮进行导航。

希望这会有所帮助。

【讨论】:

谢谢!它似乎不适用于我的代码...我重新启动一个新项目并放置 3 个选项卡项。然后我将 SwipeableTabBarController = false 放入 viewDidLoad() 中。但似乎只要我继承自 SwipeableTabBarController。我还有动画………… 好的,让我尝试重现此问题,看看能否找到解决方案。如果我这样做,我会更新我的答案。 只是想出一个解决方案...不确定这是否是一个好方法,但它可以完成工作..我在 tabBar(_ tabBar: UITabBar, didSelect) 内部使用 beginAppearanceTransition(false animated: false) item: UITabBarItem).. 然后在 touchesEnded() 中重新启用.. 是的,这似乎可以完成这项工作。但是为什么不使用默认的UITabBarController ???你为什么用SwipeableTabBarController ??您是否将其用于滑动功能??? 是的.. 我只是针对滑动功能。而SwipeableTabBarController 继承自UITabBarController.. 所以我假设没有区别?啊啊啊虽然我对swift还是很陌生.....【参考方案2】:

您可以在点击操作中使用 POD isSwipeEnabled = false 的属性

当您点击标签栏项目时,它将禁用滚动动画。

【讨论】:

以上是关于当用户直接点击标签栏项目时,如何禁用滑动动画?的主要内容,如果未能解决你的问题,请参考以下文章

当标签栏点击两次时禁用自动弹出到根视图控制器

如何为标签栏的项目设置动画

目标C - 再次点击标签栏项目时,如何再次重新加载网页视图?

当我点击不同的标签栏项目时,Lottie 动画停止

目标C - 再次点击标签栏项目时,如何重新加载网页视图?

当 animationEnabled 属性设置为 false 时,React Navigation 动画仍然显示