How to clear font cache filled with emoji characters?

前端 未结 6 428
日久生厌
日久生厌 2020-12-13 19:52

I am developing keyboard extension for iPhone. There is an emoji screen smilar to Apples own emoji keyboard that shows some 800 emoji characters in UICollectionView

6条回答
  •  难免孤独
    2020-12-13 20:02

    I had the same issue and tried many things to release the memory, but no luck. I just changed the code based on Matthew's suggestion. It works, no more memory problem for me including iPhone 6 Plus.

    The code change is minimal. Find the change in the UILabel subclass below. If you ask me the challenge is to get the emoji images. I could not figure how gemoji (https://github.com/github/gemoji) works out yet.

        //self.text = title //what it used to be
        let hex = emojiToHex(title)  // this is not the one Matthew provides. That one return strange values starting with "/" for some emojis. 
        let bundlePath = NSBundle.mainBundle().pathForResource(hex, ofType: "png")
    
        // if you don't happened to have the image
        if bundlePath == nil
        {
            self.text = title
            return
        }
        // if you do have the image 
        else
        {
            var image = UIImage(contentsOfFile: bundlePath!)
    
            //(In my case source images 64 x 64 px) showing it with scale 2 is pretty much same as showing the emoji with font size 32.
            var cgImage = image!.CGImage
            image = UIImage( CGImage : cgImage, scale : 2, orientation: UIImageOrientation.Up  )!
            let imageV = UIImageView(image : image)
    
            //center
            let x = (self.bounds.width - imageV.bounds.width) / 2
            let y = (self.bounds.height - imageV.bounds.height) / 2
            imageV.frame = CGRectMake( x, y, imageV.bounds.width, imageV.bounds.height)
            self.addSubview(imageV)
        }
    

    The emojiToHex() method Matthew provides returns strange values starting with "/" for some emojis. The solution at the given link work with no problems so far. Convert emoji to hex value using Swift

    func emojiToHex(emoji: String) -> String
    {
        let uni = emoji.unicodeScalars // Unicode scalar values of the string
        let unicode = uni[uni.startIndex].value // First element as an UInt32
    
        return String(unicode, radix: 16, uppercase: true)
    }
    

    ---------- AFTER SOME TIME----

    It turned out this emojiToHex method does not work for every emoji. So I end up downloading all emojis by gemoji and map each and every emoji image file (file names are like 1.png, 2.png, etc) with the emoji itself in a dictionary object. Using the following method instead now.

    func getImageFileNo(s: String) -> Int
    {
            if Array(emo.keys).contains(s)
            {
                 return emo[s]!
            }   
            return -1
    }
    

提交回复
热议问题