Как отключить анимацию смахивания, когда пользователь напрямую нажимает на элемент панели вкладок?

В моем проекте я включаю coacopods под названием «SwipeableTabBarController». Это позволяет моему контроллеру представления панели вкладок обнаруживать жесты панорамирования и переключаться между вкладками. И я также пишу код для обнаружения жеста смахивания, который позволяет пользователям скрывать панель вкладок. Проблема: в моем приложении будет анимация слайдов, даже если пользователь напрямую коснется элемента панели. Любой способ решить это? Я ценю любую помощь!

Пытался отключить жесты смахивания и панорамирования при обнаружении касания. Но жестов панорамирования нет в моем массиве жестов.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
809
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте isSwipeEnabled = false, чтобы отключить функцию смахивания. По умолчанию установлено значение true в SwipeableTabBarController

Обновлено:

Поскольку вы ищете решение без анимации, которую предоставляет библиотека SwipeableTabBarController, но все же хотите использовать функцию смахивания. Вот как вы можете сделать это по умолчанию UITabBarController.

Шаг 1: Создайте по умолчанию UITabBarController и 2 контроллера представления, назовем их ViewController_1 и ViewController_2

Шаг 2: Создайте класс для каждого ViewController и в методе ViewDidLoad() обоих ViewController_1 и ViewController_2 добавьте эти строки.

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. Анимация у меня осталась.........

JINGYA HAN 19.06.2019 02:47

Хорошо, позвольте мне попытаться воспроизвести это и посмотреть, смогу ли я найти решение. Если я это сделаю, я обновлю свой ответ.

Cedan Misquith 19.06.2019 06:22

Просто придумайте решение... Не уверен, что это хороший способ, но он выполняет свою работу. Я использую beginAppearanceTransition(false анимированный: false) внутри tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem).. Затем повторно -включить в touchesEnded()..

JINGYA HAN 19.06.2019 07:56

Да, похоже, это работает. Но почему бы вам не использовать дефолтный UITabBarController ??? Почему вы используете SwipeableTabBarController ?? Вы используете его для функции салфетки ???

Cedan Misquith 19.06.2019 08:14

Да .. Я просто стремлюсь к функции прокрутки. И SwipeableTabBarController наследуется от UITabBarController.. Итак, я предполагаю, что разницы нет? аааа, я на самом деле совсем новичок в быстроте, хотя.....

JINGYA HAN 19.06.2019 08:38

Если вы выберете SwipeableTabBarController, вам придется пожертвовать анимацией при нажатии на элемент панели вкладок. Вместо этого, почему бы вам не создать функцию смахивания по умолчанию? Я обновлю свой ответ некоторым базовым кодом. Затем вы можете настроить его соответствующим образом. Это нормально ?

Cedan Misquith 19.06.2019 08:42

Я обновил свой ответ. Это должно помочь вам добиться того, что вы пытаетесь сделать, не используя SwipeableTabBarController. Дайте мне знать, если это сработало.

Cedan Misquith 19.06.2019 08:56

Вы можете использовать свойство вашего POD isSwipeEnabled = false при касании

Это отключит анимацию прокрутки при нажатии на элементы панели вкладок.

Другие вопросы по теме