【问题标题】:How to convert Color Literal to cgColor in the Swift?如何在 Swift 中将 Color Literal 转换为 cgColor?
【发布时间】:2020-09-07 14:17:48
【问题描述】:

var CodeBackground = #colorLiteral(red: 0.1294117647, green: 0.1294117647, blue: 0.1960784314, alpha: 1)

cells?.layer.borderColor = //... how can i set this color literal to cgColor?

我知道如何在 Swift 中将该 UIColor 转换为 cgColor

举例

UIColor.black.cgColor

宾果游戏,但是 Swift 中的颜色文字到 cgColor 呢

谢谢。

【问题讨论】:

  • 完全一样的东西whatever.cgColordropbox.com/s/xxd6nw06z1adxzq/color%20literal.jpg?dl=1顺便说一句,Swift 命名约定以小写字母开头的对象命名。
  • 这仍然是个问题,我跑到 iOS 模拟器并拒绝显示颜色。 (除非您创建多个单元格可能会在您向下滑动以通过该单元格并向上滑动时产生错误,并且从不同的单元格中它是相同的)。我只需要设置 UIColor,但是该代码显示错误,要求从 UIColor 使用 cgColor....看起来很奇怪。
  • 细胞可重复使用
  • 表格视图有一个方法叫optional func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) 表格视图一结束显示就可以清除单元格内容
  • 事情很简单,使用如下:viewBack.layer.borderColor = #colorLiteral(red: 0.05882352963, green: 0.180392161, blue: 0.2470588237, alpha: 1).cgColor//UIColor.white

标签: swift uitableview uicolor cgcolor


【解决方案1】:
  • 既然,您已经知道将colorLiteral 用作cgcolor 的更简单方法,我将跳到另一种方法...
  • 为此,您需要一个自定义函数,该函数从 colorLiteral 获取颜色值(红色、绿色、蓝色),如下所示

    extension UIColor {
        func rgb() -> (red:Int, green:Int, blue:Int, alpha:Int)? {
        var fRed : CGFloat = 0
        var fGreen : CGFloat = 0
        var fBlue : CGFloat = 0
        var fAlpha: CGFloat = 0
        if self.getRed(&fRed, green: &fGreen, blue: &fBlue, alpha: &fAlpha) {
            let iRed = Int(fRed * 255.0)
            let iGreen = Int(fGreen * 255.0)
            let iBlue = Int(fBlue * 255.0)
            let iAlpha = Int(fAlpha)
    
            _ = (iAlpha << 24) + (iRed << 16) + (iGreen << 8) + iBlue
            return (red:iRed, green:iGreen, blue:iBlue, alpha:iAlpha)
        } else {
            // Could not extract RGBA components:
            return nil
        }
    }
    }
    //It's more convenient to use function in `UIColor` extension
    
  • 现在,创建此函数后,您可以将colorliteral 转换为cgColor,如下所示...

    let CodeBackground = #colorLiteral(red: 0.1294117647, green: 0.1294117647, blue: 0.1960784314, alpha: 1)
    let rgblit = CodeBackground.rgb()
    let Converted_cgColor = CGColor(srgbRed: CGFloat(integerLiteral: rgblit!.red), green: CGFloat(integerLiteral: rgblit!.green), blue: CGFloat(integerLiteral: rgblit!.blue), alpha: CGFloat(integerLiteral: rgblit!.alpha))
    
  • 可以直接用Converted_cgColor点赞

    cells?.layer.borderColor = Converted_cgColor
    

希望能有所帮助

【讨论】:

  • 啊,成功了!但是,当我按照您的路线进行操作时,此代码导致整个单元格变得不可见,就像没有显示颜色一样。
  • 如果它有效,请支持并批准答案:)
  • 现在,我发现有一些方法可以在一个单元格中添加边框颜色的代码,除了所有单元格都不需要它似乎也可以。我赞成并批准了它。 :)
猜你喜欢
  • 2015-05-06
  • 2017-04-07
  • 2021-06-01
  • 2013-07-11
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
相关资源
最近更新 更多