Как добавить вертикальный цвет градиента в UINavigationBar? - PullRequest
0 голосов
/ 11 мая 2018

Я хочу добавить цвет градиента в UINavigationBar.код для горизонтального градиента работает отлично, но для вертикального градиента, он не показывает правильный цвет.

Спасибо заранее !!!

Мой текущий код для вертикального градиента:

extension UINavigationBar {
    /// Applies a background gradient with the given colors
    func applyNavigationGradient( colors : [UIColor]) {

        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = self.bounds
        gradientLayer.colors = colors.map { $0.cgColor }

        // *** for horizontal gradient ***
        // gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5)
        // gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5)

        // *** for vertical gradient ***
        // gradientLayer.locations = [0,1]
        gradientLayer.startPoint = CGPoint(x: 0.5, y: 0.0)
        gradientLayer.endPoint = CGPoint(x: 0.5, y: 1.0)


        UIGraphicsBeginImageContext(gradientLayer.bounds.size)
        gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

         setBackgroundImage(image, for: UIBarMetrics.default)
     }
}

1 Ответ

0 голосов
/ 11 мая 2018

Рабочий код для swift 4.1.Просто поставьте следующее: загрузил: 1001

func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    let gradientLayer = CAGradientLayer()
    var updatedFrame = self.navigationController!.navigationBar.bounds
    updatedFrame.size.height += 20
    gradientLayer.frame = updatedFrame
    gradientLayer.colors = [UIColor.green.cgColor, UIColor.blue.cgColor]
    gradientLayer.startPoint = CGPoint(x: 0.5, y: 0.0) // vertical gradient start
    gradientLayer.endPoint = CGPoint(x: 0.5, y: 1.0) // vertical gradient end

    UIGraphicsBeginImageContext(gradientLayer.bounds.size)
    gradientLayer.render(in: UIGraphicsGetCurrentContext()!)
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    self.navigationController!.navigationBar.setBackgroundImage(image, for: UIBarMetrics.default)
}
...