Кнопочный градиент не работает после ios 12 (Swift 4.2) - PullRequest
0 голосов
/ 18 сентября 2018

С выходом ios 12 и swift 4.2 мой код больше не работает.Раньше это был градиент от левой к правой темной пурпурной к светло-фиолетовой кнопке.Как я могу это исправить?

// Gives the button gradient values
func setGradientButton(colorOne: UIColor, colorTwo: UIColor, x1: Double, y1: Double, x2: Double, y2: Double) {

    let gradientLayer = CAGradientLayer()
    gradientLayer.frame = bounds
    gradientLayer.colors = [colorOne.cgColor, colorTwo.cgColor]
    gradientLayer.locations = [0.0, 0.0]
    gradientLayer.startPoint = CGPoint(x: x1, y: y1)
    gradientLayer.endPoint = CGPoint(x: x2, y: y2)

    layer.insertSublayer(gradientLayer, at: 0)
}


// Sets UI elements
func setUI(_ label : UILabel, _ button : UIButton) {

    let colorOne = UIColor(red: 119.0 / 255.0, green: 85.0 / 255.0, blue: 254.0 / 255.0, alpha: 100.0)
    let colorTwo = UIColor(red: 177.0 / 255.0, green: 166.0 / 255.0, blue: 251.0 / 255.0, alpha: 100.0)

    button.setGradientButton(colorOne: colorOne, colorTwo: colorTwo, x1: 0.0, y1: 50, x2: 150, y2: 50)
    button.layer.cornerRadius = 4
    button.clipsToBounds = true
}

1 Ответ

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

Я не могу предположить, почему ваш код работал раньше, но я вижу, что у вас есть несколько проблем с вашей CAGradientLayer настройкой.

Сначала массив locations.Согласно Документация Apple это значение " определяет местоположение каждой градиентной остановки ".Поэтому, если вы хотите, чтобы ваш градиент начинался с одного цвета и заканчивался другим, вам нужно установить locations вот так

gradientLayer.locations = [0.0, 1.0]

Еще одна проблема - startPoint и endPoint.Опять же, из документации :

Точка определяется в единичном координатном пространстве и затем отображается при рисовании в прямоугольнике границ слоя.

Таким образом, ваши значения очков должны быть между 0.0 и 1.0.В единичном координатном пространстве (0.0, 0.0) - верхний левый угол вашего обзора, а (1.0, 1.0) - нижний правый.Если вы хотите получить горизонтальный градиент, вам нужно установить такие точки

gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
gradientLayer.endPoint = CGPoint(x: 1, y: 0.5)

Надеюсь, это вам поможет.

...