Я изучаю учебное пособие по SwiftUI, в верхней части imageView добавлен градиентный вид (прямоугольник), и цель состоит в том, чтобы добиться эффекта градиента в нижней части изображения, от прозрачного до черного цвета.
Код здесь:
private func setupCell(){
let gradientView = UIView(frame: CGRect(x: 0, y: self.frame.height / 4 , width: self.frame.width, height: self.frame.height / 2) )
print("gradientView x: \(gradientView.frame.origin.x), gradientView y: \(gradientView.frame.origin.y)")
print("gradientView width \(gradientView.frame.width), gradientView height \(gradientView.frame.height)")
gradientView.layer.cornerRadius = 20
let gradient = CAGradientLayer()
gradient.frame = gradientView.frame
gradient.colors = [UIColor.clear, UIColor.black.cgColor]
gradientView.layer.insertSublayer(gradient, at: 0)
contentView.addSubview(self.imageView)
self.imageView.addSubview(gradientView)
contentView.addSubview(titleLabel)
NSLayoutConstraint.activate([
imageView.centerYAnchor.constraint(equalTo: contentView.centerYAnchor),
imageView.centerXAnchor.constraint(equalTo: contentView.centerXAnchor),
imageView.widthAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.9),
imageView.heightAnchor.constraint(equalTo: contentView.heightAnchor, multiplier: 1),
titleLabel.leadingAnchor.constraint(equalTo: imageView.leadingAnchor, constant: 10),
titleLabel.bottomAnchor.constraint(equalTo: imageView.bottomAnchor),
titleLabel.centerXAnchor.constraint(equalTo: contentView.centerXAnchor),
titleLabel.heightAnchor.constraint(equalToConstant: 50)
])
print("contentView x: \(contentView.frame.origin.x), contentView y: \(contentView.frame.origin.y)")
print("contentView width: \(contentView.frame.width), contentView height: \(contentView.frame.height)")
}
Пожалуйста, смотрите фотографии для лучшего понимания.
Случай 1:
let gradientView = UIView(frame: CGRect(x: 0, y: self.frame.height / 4 , width: self.frame.width, height: self.frame.height / 2) )
Хорошо, это ожидаемый эффект, градиент начинается от 80 и снижается до 160.
Консоль ouptput:
gradientView x: 0.0, gradientView y: 40.0
gradientView width 320.0, gradientView height 80.0
contentView x: 0.0, contentView y: 0.0
contentView width: 320.0, contentView height: 160.0
Но в этом случае я думаю, что вывод должен быть таким, как показано на рисунке ниже, как origin.x = 40 и height = 80, так что доходит до дна равного 120. В чем проблема?
Случай 2:
Измените его на CGRect(x: 0, y: self.frame.height / 2
, после запуска на iPhone эффект градиента исчезнет.