在UITableViewCell的背景图像上添加渐变

时间:2017-11-08 18:59:57

标签: ios swift uitableview cagradientlayer

我在UITableView内有一个UIViewController。我尝试在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)部分正在发生的事情。设置configureCell()时调用的scheduleStruct方法如下:

    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)
    }

任何建议:非常感谢我的错误所在。谢谢你的阅读。

1 个答案:

答案 0 :(得分:0)

David Shaw的建议下,我在configureCell()

中注释了这一行
  // backgroundImageView.kf.setImage(with: imageUrl)

并且梯度正确。我推断出我有一个计时问题,因为我异步获取图像。

我查看了方法签名,看到那里有一个带有完成处理程序的签名,所以我用它代替了它的工作原理:

  backgroundImageView.kf.setImage(with: imageUrl, completionHandler: { (image, error, cacheType, imageUrl) in
    // do stuff
  })

...所以我做了this