在UILabel中制作表情符号灰度

时间:2013-04-01 18:18:41

标签: ios objective-c iphone uilabel emoji

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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