Как мне добавить метку поверх градиента?

#swift #uicollectionview #swift3 #cagradientlayer

#swift #uicollectionview #swift3 #cagradientlayer

Вопрос:

У меня есть очень простой UICollectionView. Внутри моей CollectionViewCell у меня есть «thumbnailImage», который является просто изображением. Я хотел бы иметь градиентный слой, который меняет цвет с черного на чистый, но я также хотел бы иметь UILabel ПОВЕРХ этого CAGradient, а не под ним. Метка — это «Заголовок фильма». Я программно делаю все, включая ограничения. Как мне это выполнить? Вот мой код

 let myView: UIView = {
    let view = UIView()
    return view
}()

let gradientView: CAGradientLayer = {
    let grad = CAGradientLayer()
    grad.colors = [UIColor.white.cgColor, UIColor.red.cgColor]
    grad.locations = [0.7, 1.2]
    return grad
}()

func setupViews() {
    thumbnailImageView.addSubview(movieTitle)
    addSubview(thumbnailImageView)
    thumbnailImageView.addSubview(dividerLine)
    thumbnailImageView.addSubview(myView)
    myView.layer.addSublayer(gradientView)

    addConstrainsWithFormat(format: "H:|[v0]|", views: thumbnailImageView)
    addConstrainsWithFormat(format: "V:|[v0]|", views: thumbnailImageView)

    thumbnailImageView.addConstrainsWithFormat(format: "H:|[v0]|", views: myView)
    thumbnailImageView.addConstrainsWithFormat(format: "V:|[v0]|", views: myView)

    thumbnailImageView.addConstrainsWithFormat(format: "H:|[v0]|", views: dividerLine)
    thumbnailImageView.addConstrainsWithFormat(format: "V:[v0(0.75)]|", views: dividerLine)

    thumbnailImageView.addConstrainsWithFormat(format: "H:|-16-[v0]-16-|", views: movieTitle)
    thumbnailImageView.addConstrainsWithFormat(format: "V:[v0(25)]-8-|", views: movieTitle)
}
  

Ответ №1:

Попробуйте изменить порядок ваших представлений, чтобы метка отображалась над представлением с градиентом внутри:

 myView.layer.addSublayer(gradientView)
thumbnailImageView.addSubview(myView)
thumbnailImageView.addSubview(movieTitle)
thumbnailImageView.addSubview(dividerLine)
addSubview(thumbnailImageView)
  

Вы также можете вставлять слои и виды ниже или выше уже существующих слоев / представлений в вашей иерархии:

 view.insertSubview(subview, at: 0)
view.insertSubview(subview, belowSubview: existingView)
view.insertSubview(subview, aboveSubview: existingView)

layer.insertSublayer(gradientLayer, at: 0)
layer.insertSublayer(gradientLayer, below: anotherLayer)
layer.insertSublayer(gradientLayer, above: anotherLayer)