在UILabel中制作表情符号灰度

我想在UILabel使用Apple的内置表情符号字符(特别是几个表情符号,例如\ue415) ,但我希望表情符号能够以灰度渲染。

我希望他们在UILabel保留字符(无论是纯文本还是归属都很好)。 我不是在寻找混合图像/字符串解决方案(我已经拥有)。

有谁知道怎么做到这一点?

我知道你说你不是在寻找一个“混合图像解决方案”,但我一直在追逐这条龙一段时间,我能想出的最佳结果是混合动力。 为了防止我的解决方案对您的旅程更有帮助,我将其包含在此处。 祝你好运!

 import UIKit import QuartzCore class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // the target label to apply the effect to let label = UILabel(frame: view.frame) // create label text with empji label.text = "🍑 HELLO" label.textAlignment = .center // set to red to further show the greyscale change label.textColor = .red // calls our extension to get an image of the label let image = UIImage.imageWithLabel(label: label) // create a tonal filter let tonalFilter = CIFilter(name: "CIPhotoEffectTonal") // get a CIImage for the filter from the label image let imageToBlur = CIImage(cgImage: image.cgImage!) // set that image as the input for the filter tonalFilter?.setValue(imageToBlur, forKey: kCIInputImageKey) // get the resultant image from the filter let outputImage: CIImage? = tonalFilter?.outputImage // create an image view to show the result let tonalImageView = UIImageView(frame: view.frame) // set the image from the filter into the new view tonalImageView.image = UIImage(ciImage: outputImage ?? CIImage()) // add the view to our hierarchy view.addSubview(tonalImageView) } } extension UIImage { class func imageWithLabel(label: UILabel) -> UIImage { UIGraphicsBeginImageContextWithOptions(label.bounds.size, false, 0.0) label.layer.render(in: UIGraphicsGetCurrentContext()!) let img = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return img! } }