Как анимировать элементы панели вкладок - PullRequest
0 голосов
/ 24 октября 2018

В моем приложении Swift у меня есть этот класс, который обрабатывает UITabBar.

class CustomTabBar: UITabBar {
    override func awakeFromNib() {
        super.awakeFromNib()
    }
}

Как я могу анимировать элементы, когда пользователь нажимает на них?Я имею в виду CGAffine(scaleX: 1.1, y: 1.1) Так, как я могу анимировать элементы панели вкладок?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Первый:

создать пользовательский UITabBarController следующим образом:
import UIKit

enum TabbarItemTag: Int {
    case firstViewController = 101
    case secondViewConroller = 102
}

class CustomTabBarController: UITabBarController {
    var firstTabbarItemImageView: UIImageView!
    var secondTabbarItemImageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let firstItemView = tabBar.subviews.first!
        firstTabbarItemImageView = firstItemView.subviews.first as? UIImageView
        firstTabbarItemImageView.contentMode = .center

        let secondItemView = self.tabBar.subviews[1]
        self.secondTabbarItemImageView = secondItemView.subviews.first as? UIImageView
        self.secondTabbarItemImageView.contentMode = .center
    }

    private func animate(_ imageView: UIImageView) {
        UIView.animate(withDuration: 0.1, animations: {
            imageView.transform = CGAffineTransform(scaleX: 1.25, y: 1.25)
        }) { _ in
            UIView.animate(withDuration: 0.25, delay: 0.0, usingSpringWithDamping: 0.5, initialSpringVelocity: 3.0, options: .curveEaseInOut, animations: {
                imageView.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
            }, completion: nil)
        }
    }

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        guard let tabbarItemTag = TabbarItemTag(rawValue: item.tag) else {
            return
        }

        switch tabbarItemTag {
        case .firstViewController:
            animate(firstTabbarItemImageView)
        case .secondViewConroller:
            animate(secondTabbarItemImageView)
        }
    }
}

Второй:

Установить значения tag для tabBarItem для каждогоКонтроллер представления:

Первый контроллер View:

import UIKit

class FirstViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        tabBarItem.tag = TabbarItemTag.firstViewController.rawValue
    }
}

Второй контроллер View:

import UIKit

class SecondViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        tabBarItem.tag = TabbarItemTag.secondViewConroller.rawValue
    }
}

Убедитесь, что все настроено с вашей раскадровкой (если вы ее используете)и это довольно много!

Вывод:

enter image description here

Вы можете проверить репо:

https://github.com/AhmadFayyas/Animated-TabbarItem/tree/master

для демонстрации ответа.

0 голосов
/ 24 октября 2018

Поскольку UITabBarItem не является подклассом UIView, но вместо этого подклассом NSObject, нет прямого способа анимировать элемент при нажатии.

Вы также должны выкопать UIView который принадлежит элементу и анимировать его, или создать пользовательскую панель вкладок.

Здесь - несколько идей по поиску UIView здесь, например, , как срабатывать при нажатии на предмет.Но будьте очень осторожны с этим подходом:

  • Apple может изменить реализацию UITabBar, что может нарушить это.
  • Вы можете мешать анимации iOS и получать странные эффекты.

Кстати, нет необходимости создавать подкласс UITabBar.Реализация UITabBarDelegate - это все, что вам нужно.

Я бы действительно посоветовал вам просто придерживаться стандартных UITabBar вариантов поведения и скинов, и выяснить это позже или нет вообще.Подобные вещи могут сжечь ваше время, не добавляя много в приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...