在 UITableViewCell 的背景图片上添加渐变
Adding gradient on background image of UITableViewCell
我在 UIViewController
里面有一个 UITableView
。我正在尝试在 UITableViewCell
中的背景图像上应用渐变。我可以绘制渐变,但它在颜色之间绘制一条清晰的线而不是渐变。
在我的 cellForRowAt
中,我将一个对象分配给我的 CustomTableViewCell
,如下所示:
let cellIdentifier = "Cell"
// all the standard data source, delegate stuff for uitableviews
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! CustomTableViewCell
let scheduleItem = scheduleData[indexPath.row]
cell.scheduleStruct = scheduleItem
return cell
}
在 CustomTableViewCell
,我已经 属性 声明:
public var scheduleStruct: FullScheduleStruct? {
didSet {
configureCell()
}
// emptyView to throw on top of a background image
var gradientView: UIView?
我还使用 Kingfisher
从互联网上提取图像,ImageResource(downloadURL: url)
部分就是这样做的。设置scheduleStruct
时调用的configureCell()
方法是这样设置的:
private func configureCell() {
// get the background image
if let url = scheduleStruct?.show.image?.original {
let imageUrl = ImageResource(downloadURL: url)
backgroundImageView.contentMode = .scaleAspectFill
backgroundImageView.kf.setImage(with: imageUrl)
// configure the gradientView
gradientView = UIView(frame: backgroundImageView.frame)
let gradient = CAGradientLayer()
gradient.frame = gradientView!.frame
gradient.colors = [UIColor.clear.cgColor, UIColor.white.cgColor]
// gradient.locations = [0.0, 1.0]
gradient.startPoint = CGPoint(x: 0, y: 0)
gradient.endPoint = CGPoint(x: 0, y: 1)
gradientView!.layer.insertSublayer(gradient, at: 0)
backgroundImageView.insertSubview(gradientView!, at: 0)
}
非常感谢关于我的错误所在的任何建议。感谢阅读。
在David Shaw的建议下,我在configureCell()
中注释掉了这一行
// backgroundImageView.kf.setImage(with: imageUrl)
并且渐变绘制正确。我推断我遇到了时间问题,因为我正在异步获取图像。
我查看了方法签名,发现其中有一个带有完成处理程序,所以我改用它并且它有效:
backgroundImageView.kf.setImage(with: imageUrl, completionHandler: { (image, error, cacheType, imageUrl) in
// do stuff
})
...所以我做了 this。
我在 UIViewController
里面有一个 UITableView
。我正在尝试在 UITableViewCell
中的背景图像上应用渐变。我可以绘制渐变,但它在颜色之间绘制一条清晰的线而不是渐变。
在我的 cellForRowAt
中,我将一个对象分配给我的 CustomTableViewCell
,如下所示:
let cellIdentifier = "Cell"
// all the standard data source, delegate stuff for uitableviews
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! CustomTableViewCell
let scheduleItem = scheduleData[indexPath.row]
cell.scheduleStruct = scheduleItem
return cell
}
在 CustomTableViewCell
,我已经 属性 声明:
public var scheduleStruct: FullScheduleStruct? {
didSet {
configureCell()
}
// emptyView to throw on top of a background image
var gradientView: UIView?
我还使用 Kingfisher
从互联网上提取图像,ImageResource(downloadURL: url)
部分就是这样做的。设置scheduleStruct
时调用的configureCell()
方法是这样设置的:
private func configureCell() {
// get the background image
if let url = scheduleStruct?.show.image?.original {
let imageUrl = ImageResource(downloadURL: url)
backgroundImageView.contentMode = .scaleAspectFill
backgroundImageView.kf.setImage(with: imageUrl)
// configure the gradientView
gradientView = UIView(frame: backgroundImageView.frame)
let gradient = CAGradientLayer()
gradient.frame = gradientView!.frame
gradient.colors = [UIColor.clear.cgColor, UIColor.white.cgColor]
// gradient.locations = [0.0, 1.0]
gradient.startPoint = CGPoint(x: 0, y: 0)
gradient.endPoint = CGPoint(x: 0, y: 1)
gradientView!.layer.insertSublayer(gradient, at: 0)
backgroundImageView.insertSubview(gradientView!, at: 0)
}
非常感谢关于我的错误所在的任何建议。感谢阅读。
在David Shaw的建议下,我在configureCell()
中注释掉了这一行
// backgroundImageView.kf.setImage(with: imageUrl)
并且渐变绘制正确。我推断我遇到了时间问题,因为我正在异步获取图像。
我查看了方法签名,发现其中有一个带有完成处理程序,所以我改用它并且它有效:
backgroundImageView.kf.setImage(with: imageUrl, completionHandler: { (image, error, cacheType, imageUrl) in
// do stuff
})
...所以我做了 this。