uicollectionviewcell - 如何将渐变层添加到集合视图单元格
问题描述
我正在尝试向集合视图单元格添加渐变,如下所示:
到目前为止,我得到的结果并未涵盖整个单元格:
我有一个 集合视图单元格:
class CollectionViewCell: UICollectionViewCell {
@IBOutlet weak var cellView: UIView!
let diagonalGradient = DiagonalGradient()
override func layoutSubviews() {
super.layoutSubviews()
diagonalGradient.frame = cellView.bounds
}
以及自定义渐变类:
class DiagonalGradient: UIView {
let gradient = CAGradientLayer()
override init(frame: CGRect) {
super.init(frame:frame)
setupGradient(color: UIColor.red))
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupGradient(color: UIColor.red))
}
func setupGradient(color: UIColor ) {
gradient.colors = [
UIColor.clear.cgColor,
color.cgColor
]
gradient.startPoint = CGPoint(x: 0, y: 1)
gradient.endPoint = CGPoint(x: 1, y: 0)
gradient.frame = bounds
layer.addSublayer(gradient)
}
}
最后,在故事板中,我将 cellView 的类分配给我的自定义渐变类。我该如何解决?
解决方案
您在错误的时间设置了渐变图层框架。
将其移至layoutSubviews()
:
class DiagonalGradient: UIView {
let gradient = CAGradientLayer()
override init(frame: CGRect) {
super.init(frame:frame)
setupGradient(color: UIColor.red))
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupGradient(color: UIColor.red))
}
func setupGradient(color: UIColor ) {
gradient.colors = [
UIColor.clear.cgColor,
color.cgColor
]
gradient.startPoint = CGPoint(x: 0, y: 1)
gradient.endPoint = CGPoint(x: 1, y: 0)
// don't do this here
//gradient.frame = bounds
layer.addSublayer(gradient)
}
override func layoutSubviews() {
super.layoutSubviews()
// do this here
gradient.frame = bounds
}
}
推荐阅读
- mongodb - 无法使用 useContext 挂钩将 axios 请求从前端发送到后端
- docker-compose - 在 docker-compose 中运行时,Go micro 仪表板未注册我的服务
- excel - 从相邻单元格细节动态改变 CC 场
- python - Python - 更改从字典初始化的对象属性会影响原始字典?
- android - 打开网页,跳转到AppGallery中某个应用的URL
- reactjs - 会话超时时如何处理 Jhispter 中的重定向?
- c++ - 如何使用英特尔 PIN 捕获阵列的所有负载?
- functional-programming - 标准 ML 风格:可变阴影是好的风格吗?
- python - TensorFlow 模型拟合和 train_on_batch 之间的区别
- facebook - 如何动态获取 Facebook 的短访问令牌