Изменить альфу первого изображения на вкладке SWIFT

Я использую ESTabBarController для создания TabBar. Мне нужно получить доступ к первому imageView, чтобы изменить его alpha, каждый раз, когда это selectedItem. Между прочим, tabbarcontroller находится под UINavigationController. Могу ли я получить некоторую помощь в этом? Код могу предоставить, если нужно. Я пытаюсь изменить альфу, когда на didSet из selectedIndex

я пытался

navigationController.tabBarController.tabBar.compactMap{$0 as? UIImageView}.first.alpha = 1 возвращает ноль.


person CRey    schedule 14.09.2019    source источник


Ответы (2)


ESTabBarController на самом деле является идеальной основой для того, что вы хотите сделать, и многого другого, я только что посмотрел на него из-за вашего вопроса! Итак, следующий код наверняка должен делать то, что вы намеревались. Добавьте его в ViewController.swift нового приложения с одним представлением и попробуйте сами.

Вы можете настроить вторую кнопку в выбранном состоянии по своему усмотрению, изменив ExampleBasicContentView. Если вы хотите, чтобы все элементы TabBarItem вели себя одинаково, добавьте ExampleBasicContentView() в качестве первого параметра инициализаторов, как я сделал для второго элемента.

import UIKit
import ESTabBarController

class ViewController: ESTabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let v1 = ExampleViewController()
        let v2 = ExampleViewController()
        let v3 = ExampleViewController()
        let v4 = ExampleViewController()
        let v5 = ExampleViewController()

        v1.tabBarItem = ESTabBarItem.init(title: "Home", image: UIImage(named: "home"), selectedImage: UIImage(named: "home_1"))
        v2.tabBarItem = ESTabBarItem.init(ExampleBasicContentView(), title: "Find", image: UIImage(named: "find"), selectedImage: UIImage(named: "find_1"))
        v3.tabBarItem = ESTabBarItem.init(title: "Photo", image: UIImage(named: "photo"), selectedImage: UIImage(named: "photo_1"))
        v4.tabBarItem = ESTabBarItem.init(title: "Favor", image: UIImage(named: "favor"), selectedImage: UIImage(named: "favor_1"))
        v5.tabBarItem = ESTabBarItem.init(title: "Me", image: UIImage(named: "me"), selectedImage: UIImage(named: "me_1"))

        tabBar.shadowImage = nil
        viewControllers = [v1, v2, v3, v4, v5]
    }
}


class ExampleBasicContentView: ESTabBarItemContentView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        highlightIconColor = iconColor.withAlphaComponent(0.4)
        highlightTextColor = textColor.withAlphaComponent(0.4)
    }

    public required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

person unixb0y    schedule 14.09.2019
comment
Принял это, потому что это точно и ясно, хотя я не использовал это, потому что у меня уже были эти классы, и в нем просто отсутствовала строка кода. Я решил это, хотя. - person CRey; 15.09.2019
comment
Спасибо за согласие, я рад, что вы поняли это! Чего не хватало? - person unixb0y; 15.09.2019
comment
по сути то, что у вас было highlightIconColor = iconColor.withAlphaComponent(0.4), но моя собственная вариация. - person CRey; 15.09.2019

Можно использовать следующее:

tabBarController?.tabBar.items?[i].image.alpha = // Your value
person Gringo Russo    schedule 14.09.2019
comment
изображение не имеет члена alpha. Кроме того, мне нужен imageView, а не изображение. - person CRey; 14.09.2019