代码之家  ›  专栏  ›  技术社区  ›  user2876886

如何在UITableViewCell上使用CAGradientLayers

  •  0
  • user2876886  · 技术社区  · 7 年前

    我在UITableViewCells上使用CAGradientLayers时遇到了问题。我试图做的是模拟actionsForRowAtIndexPath的功能,但我想使用自定义动作视图,而不仅仅是设置背景色。

    因此,我的行动计划是在我的UITableViewCell中,我列出了一个UIView(动作视图),它隐藏在另一个UIView(主内容视图)下面,这两个UIView都在UITableViewCell的默认contentView中。

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
        let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell", for: indexPath) as! CustomTableViewCell
    
        // Set Up Gradient
        let actionGradient = CUSTOM_GRADIENTS.blueToGreen!
        actionGradient.frame = cell.actionView.frame
    
        // Add Gradient to ActionView
        cell.actionView.insertSubLayer(actionGradient, at: 0)
    
        return cell
    }
    

    仅供参考,我的CUSTOM_GRADIENTS是一个在ApplicationDelegate中初始化的类:

    class safeGradiants {
    
        var blueToGreen: CAGradientLayer!
    
        init() {
    
            self.blueToGreen = CAGradientLayer()
            self.blueToGreen.colors = [UIColor.blue, UIColor.]
            self.blueToGreen.startPoint = CGPoint(x: 0.0, y: 0.5)
            self.blueToGreen.endPoint = CGPoint(x: 1.0, y: 0.5)
        }
    }
    

    我需要做些什么才能在actionView上显示所有细胞的梯度,你有什么想法吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   user2876886 user2876886    7 年前

    在一番胡闹之后,我发现我的问题出在安全梯度课上。因为我使用的是该类的一个全局实例,所以无法重用同一个变量blueToGreen。

    解决方案不是创建一个类并拥有该类的一个全局实例,而是创建一个承载子类函数的CAGradientLayer扩展。换句话说,我更改了此代码:

    class safeGradiants {
    
    var blueToGreen: CAGradientLayer!
    
        init() {
    
            self.blueToGreen = CAGradientLayer()
            self.blueToGreen.colors = [UIColor.blue, UIColor.]
            self.blueToGreen.startPoint = CGPoint(x: 0.0, y: 0.5)
            self.blueToGreen.endPoint = CGPoint(x: 1.0, y: 0.5)
        }
    }
    

    extension CAGradientLayer {
    
        class var blueToGreen: CAGradientLayer {
            let blueToGreen = CAGradientLayer()
            blueToGreen.colors = [UIColor.blue, UIColor.green]
            blueToGreen.startPoint = CGPoint(x: 0.0, y: 0.5)
            blueToGreen.endPoint = CGPoint(x: 1.0, y: 0.5)
            return blueToGreen
        }
    }