почему мой UIImage не появляется в моем tabBar? - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь добавить UIImage для настройки моего tabBar так же, как я делал с моим navigationBar, но, похоже, это не работает.

Сначала я создаю CAGradientLayer, а затем превращаю его в UIImage. Вот код:

extension CALayer {

    func createImageFromLayer() -> UIImage?{
        frame = CGRect(x: 0, y: 0, width: 1000, height: 1000)
        UIGraphicsBeginImageContext(frame.size)
        guard let context = UIGraphicsGetCurrentContext() else {return nil}
        render(in: context)
        let output = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return output
    }

}

class CustomTabBarController: UITabBarController {

    let grad: CAGradientLayer = {
        let gradient = CAGradientLayer()
        gradient.colors = [UIColor.clear, UIColor.black]
        gradient.locations = [0,1]
        return gradient
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        let tabImage = grad.createImageFromLayer()
        self.tabBar.isTranslucent = true
        self.tabBar.backgroundImage = tabImage
        self.tabBar.shadowImage = UIImage()
    }
}

Настройка изображения для моего navigationBar отлично работала, используя этот метод:

navigationController?.navigationBar.setBackgroundImage(barImg, for: UIBarMetrics.default)

В этом коде barImg - это UIImage, созданный из CAGradientLayer, как и с tabBar. Я проверил, если tabImage это nil, а это не так.

Кажется, что tabBar не имеет функции, подобной tabBar.setBackgroundImage, как navigationBar. Как мне это сделать?

Единственный результат, который я получаю, - это совершенно четкий фон для моего tabBar без добавления градиента, и я не знаю, чего мне здесь не хватает, однажды tabBar.backgroundImage не работает.

Спасибо за ответы.

1 Ответ

0 голосов
/ 08 сентября 2018

Сначала, когда вы устанавливаете цвета для CAGradientLayer, вы должны использовать только CGColor объекты. Поэтому вам нужно изменить эту строку на

gradient.colors = [UIColor.clear.cgColor, UIColor.black.cgColor]

После этого ваш tabImage не будет пустым и станет видимым.

Последняя проблема заключается в том, что вы всегда устанавливаете размер изображения на 1000x1000 пикселей. Это слишком много. Чтобы исправить это, вы можете передать целевой размер кадра createImageFromLayer в качестве параметра. Его подпись станет чем-то вроде этого.

func createImageFromLayer(targetFrame: CGRect) -> UIImage?

В вашем случае targetFrame - это tabBar.bounds.

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