NSTextAttachment中的图像太大而且模糊

时间:2018-02-25 14:53:31

标签: swift uilabel nstextattachment

我正在尝试在UILabel的文本旁边放置一个图标(以图像的形式)。这些图标以三种尺寸导入资源,当我只是将它们放在普通的UIImageView中时,它们根本不模糊。 然而,在NSTextAttachment中,它们突然变得非常模糊,而且太大了。

我自己已经尝试了几件事,并尝试了几乎我在网上找到的每个片段 - 没有任何帮助。这就是我剩下的:

func updateWinnableCoins(coins: Int){
    let attachImg =  NSTextAttachment()
    attachImg.image = resizeImage(image: #imageLiteral(resourceName: "geld"), targetSize: CGSize(width: 17.0, height: 17.0))
    attachImg.setImageHeight(height: 17.0)
    let imageOffsetY:CGFloat = -3.0;
    attachImg.bounds = CGRect(x: 0, y: imageOffsetY, width: attachImg.image!.size.width, height: attachImg.image!.size.height)
    let attchStr = NSAttributedString(attachment: attachImg)
    let completeText = NSMutableAttributedString(string: "")
    let tempText = NSMutableAttributedString(string: "You can win " + String(coins) + " ")
    completeText.append(tempText)
    completeText.append(attchStr)
    self.lblWinnableCoins.textAlignment = .left;
    self.lblWinnableCoins.attributedText = completeText;
}

func resizeImage(image: UIImage, targetSize: CGSize) -> (UIImage) {

    let newRect = CGRect(x: 0, y: 0, width: targetSize.width, height: targetSize.height).integral
    UIGraphicsBeginImageContextWithOptions(targetSize, false, 0)
    let context = UIGraphicsGetCurrentContext()

    // Set the quality level to use when rescaling
    context!.interpolationQuality = CGInterpolationQuality.default
    let flipVertical = CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: targetSize.height)

    context!.concatenate(flipVertical)
    // Draw into the context; this scales the image
    context?.draw(image.cgImage!, in: CGRect(x: 0.0,y: 0.0, width: newRect.width, height: newRect.height))

    let newImageRef = context!.makeImage()! as CGImage
    let newImage = UIImage(cgImage: newImageRef)

    // Get the resized image from the context and a UIImage
    UIGraphicsEndImageContext()

    return newImage
}

extension NSTextAttachment {
    func setImageHeight(height: CGFloat) {
        guard let image = image else { return }
        let ratio = image.size.width / image.size.height

        bounds = CGRect(x: bounds.origin.x, y: bounds.origin.y, width: ratio * height, height: height)
    }
}

这就是它的样子:

enter image description here

UILabel的字体大小是17,所以我将文本附件设置为17大。当我将它设置为9时,它适合,但它仍然非常模糊。

我该怎么办?

0 个答案:

没有答案