10

我想使用 Apple 的内置表情符号字符(特别是几个笑脸,例如\ue415)在 a 中,UILabel但我希望表情符号以灰度呈现。

我希望它们保留字符UILabel(纯文本或属性都可以)。我不是在寻找混合图像/字符串解决方案(我已经拥有)。

有谁知道如何做到这一点?

4

1 回答 1

2

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

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!
    }
}
于 2017-12-23T16:39:59.157 回答