Добавить слой градиента в UIImageView в IOS через CAGradientLayer - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь добавить градиент в IOS, как в Android .Таким образом, я могу видеть мой ярлык поверх UIImageView, и он не скрыт.

enter image description here

В Android я сделал это в отрисовке `

<gradient
    android:angle="90"
    android:endColor="#00ffffff"
    android:startColor="#aa000000"
    android:centerColor="#00ffffff" />

<corners android:radius="0dp" />

`

Я пытаюсь сделать это в IOS Swift 4.2 и получаю следующее:

    let gradient: CAGradientLayer = CAGradientLayer()
    gradient.colors = [UIColor.blue.cgColor, UIColor.red.cgColor]
    gradient.locations = [0.0 , 1.0]
    gradient.startPoint = CGPoint(x: 0.0, y: 1.0)
    gradient.endPoint = CGPoint(x: 0.5, y: 0.5)
    gradient.frame = CGRect(x: 0.0, y: 0.0, width: showImageView.frame.size.width, height: showImageView.frame.size.height)
    showImageView.layer.addSublayer(gradient)

enter image description here

Как заставить градиент начать черный снизу и подняться на 90 градусов? Как изменить непрозрачность? Есть идеи?

1 Ответ

0 голосов
/ 19 февраля 2019

Несколько мыслей:

  1. Выберите цвета с alpha меньше 1. Возможно:

    gradient.colors = [
        UIColor.black.withAlphaComponent(0.8).cgColor,
        UIColor.black.withAlphaComponent(0).cgColor
    ]
    
  2. Чтобы иметь этот градиентидите вертикально, выберите начальную и конечную точки с одинаковым значением x.Например, чтобы покрыть нижнюю половину, возможно:

    gradient.startPoint = CGPoint(x: 0.5, y: 1)
    gradient.endPoint = CGPoint(x: 0.5, y: 0.5)
    
  3. Будьте очень осторожны с использованием frame.Вы хотите, чтобы слой ссылался на bounds вида изображения (используя систему координат представления изображения), а не frame (который указывает, где вид изображения находится в системе координат его суперпредставления).Если ваш вид изображения находится на 0, 0, вы можете не увидеть разницы, но если вы вообще переместите вид изображения, они начнут отклоняться.Итак, предполагая, что вы добавляете этот градиент к представлению изображения, вы будете использовать границы представления изображения:

    gradient.frame = showImageView.bounds
    

Таким образом:

let gradient = CAGradientLayer()
gradient.colors = [
    UIColor.black.withAlphaComponent(0.8).cgColor,
    UIColor.black.withAlphaComponent(0.0).cgColor
]
gradient.startPoint = CGPoint(x: 0.5, y: 1)
gradient.endPoint = CGPoint(x: 0.5, y: 0.5)
imageView.layer.addSublayer(gradient)
gradient.frame = showImageView.bounds
...