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

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

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

【问题讨论】:

    标签: swift gesture uipangesturerecognizer


    【解决方案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 的属性

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 2019-03-29
      • 2021-08-21
      • 1970-01-01
      • 2015-10-08
      • 2018-11-11
      相关资源
      最近更新 更多