Я программно переключаю вкладки в приложении, управляемом панелью вкладок, используя UITabBarController.selectedIndex
. Проблема, которую я пытаюсь решить, заключается в том, как анимировать переход между представлениями. т.е. из представления текущей вкладки в представление выбранной вкладки.
Первой мыслью было использовать UITabBarControllerDelegate
, но похоже, что это не вызывается при программном переключении вкладок. Сейчас я рассматриваю UITabBarDelegate.didSelectItem
: как возможный крючок для установки анимации перехода.
Кому-нибудь удалось анимировать переходы? Если да, то как?
ios4
uitabbarcontroller
uitabbar
дрекка
источник
источник
Ответы:
Обновление 04/2016: Джастед хотел обновить это, чтобы поблагодарить всех за все голоса. Также обратите внимание, что это было изначально написано еще когда ... до ARC, до ограничений, до ... много всего! Поэтому, пожалуйста, примите это во внимание при принятии решения об использовании этих методов. Могут быть более современные подходы. Ах да, если найдешь. Пожалуйста, добавьте ответ, чтобы все могли видеть. Спасибо.
Некоторое время спустя ...
После долгих исследований я пришел к двум рабочим решениям. Оба они работали и делали анимацию между вкладками.
Решение 1.Переход из представления (простой)
Это самый простой способ, в котором используется предопределенный метод перехода UIView. С этим решением нам не нужно управлять представлениями, потому что метод делает всю работу за нас.
Решение 2: прокрутка (более сложная)
Более сложное решение, но дает вам больше контроля над анимацией. В этом примере мы заставляем представления скользить по экрану. В этом случае нам нужно самостоятельно управлять просмотром.
Это решение в Swift:
источник
shouldSelectViewController
и вернул NO тамНиже я пытаюсь использовать кодовую форму drekka в методе делегата (UITabBarControllerDelegate)
источник
Мое решение для iOS7.0 или выше.
Вы можете указать настраиваемый контроллер анимации в делегате панели вкладок.
Реализуйте контроллер анимации следующим образом:
Затем используйте его в своем UITabBarControllerDelegate:
источник
Вместо использования
tabBarController:shouldSelectViewController:
лучше реализоватьtabBarController:animationControllerForTransitionFromViewController:toViewController:
TransitioningObject.swift
TabBarViewController.swift
источник
Я думаю, вы можете легко добиться переходов для UITabBarControlelr с помощью CATransition; Это также решит любые побочные эффекты использования transitionFromView: toView:
Используйте это внутри своего настраиваемого класса TabBarController, расширенного из UITabBarController.
Надеюсь это поможет :)
источник
Я написал сообщение, попробовав различные ответы здесь.
Код находится в Swift, и вы можете программно изменить вкладку с анимацией, вызвав
animateToTab
.Если вы хотите, чтобы при смене всех вкладок отображалась анимация, подключите ее
UITabBarControllerDelegate
как таковую:источник
Мое решение в Swift:
Создайте собственный класс TabBar и установите его в раскадровке TabBar
источник
finished
будет ложной). Я не знаю, почему это произошло, но я думаю, что это связано с преобразованием CA, которое считает, что «анимировать нечего». Я переключился на анимацию с кадрами, и это сработало.Я использовал решение @ Mofumofu и обновил его до Swift 1.2, а также реализовал анимацию вверх / вниз. Это означает, что новый ViewController появляется и подталкивает старый, если индекс нового ViewController больше, чем у старого. В противном случае направление будет вниз.
В контейнере ViewController:
источник
Вот мое решение Swift 3:
Я переопределяю selectedIndex моего UITabBarViewController следующим образом:
Затем я использую эту функцию, которая имитирует встроенную анимацию push / pop:
Я надеюсь, что это помогает :)
источник
исправление скачкообразной анимации ...
UIView * fromView = self.view.superview;
источник
это можно решить двумя способами
1 - Запишите это в файл AppDelegate.m один раз. Не забудьте включить UITabBarControllerDelegate, используя <> после двоеточия (:) в вашем AppDelegate.h
2 - Запишите это в каждый файл ViewController.m
надеюсь, что это поможет ...!
источник
Вы можете анимировать в зависимости от затронутого элемента - в этом примере мы flipFromLeft, если затронутый индекс>, чем предыдущий выбранный индекс, и мы flipFromRight, если затронутый индекс <, чем предыдущий выбранный индекс. Это Swift 4. Реализуйте метод UITabBarControllerDelegate.
источник
Ответ Дрекки действительно великолепен. Я немного изменил переход прокрутки, чтобы анимация была больше похожа на анимацию нажатия Apple. Я добавил дополнительную анимацию по завершении первой анимации, чтобы эффект скольжения выглядел правильно.
источник
Я хотел использовать флип-переход между двумя дочерними контроллерами представления при нажатии кнопки и добился этого следующим образом:
Я также установил черный цвет фона, в моем случае я сделал это, установив navigationController.view.backgroundColor, но в вашем случае это может быть window.backgroundColor, который можно легко установить в делегате приложения.
источник
Вот мой рабочий код ( для 3 вкладок , больше не пробовал !!) для анимации переходов между вкладками. Он в основном основан на решении drekka, но уже реализован в методе делегата панели вкладок, поэтому он должен выполнить свою работу, если вы просто скопируете / вставите его ... (вы никогда не знаете!)
}
источник
Это работает для меня в Swift 3:
источник
@samwize Ответ, переведенный на Swift 3 - 2 больших пальца вверх на этом, создает эффект страницы слева направо:
источник
Ответ @samwize обновлен для Swift 5:
Если вы хотите, чтобы все изменения вкладок имели анимацию, используйте UITabBarControllerDelegate и реализуйте этот метод:
Программно изменить вкладку с анимацией, вызвав
animateToTab
:источник
Swift 4+
Ваш
UITabBarControllerDelegate
метод должен быть таким,И метод,
источник