gpt4 book ai didi

ios - UIButton 中的 UIImage 用矢量图像像素化

转载 作者:搜寻专家 更新时间:2023-10-31 22:32:25 24 4
gpt4 key购买 nike

我正在尝试使用 Swift 在 XCode 的 UIButton 中放入图像。该按钮位于键盘扩展中,我正在尝试放入“地球”图标,就像 iOS 内置键盘中已有的图标一样。我曾经使用地球仪表情符号和 unicode(它们会自动被拾取为表情符号),但这看起来不太好。

所以现在,无论我使用哪个文件,我的图像都是模糊的。到目前为止,我已经使用了 22pt、200pt、600pt、svg 和 pdf 的图像。没有运气。

这是它的样子: Blurry image

这就是 Apple 的样子,非常锋利:Sharp image

我的按钮代码是这样的:

//Set an image to fit inside a button
let btn = nextKeyboardButton
let image = UIImage(named: "globe")!
var scaledImage = image
var targetWidth : CGFloat = 0
var targetHeight : CGFloat = 0
let spacing : CGFloat = 10

if(btn.frame.width < btn.frame.height){
targetWidth = round(btn.frame.width - (spacing * 2))
targetHeight = targetWidth
} else {
targetHeight = round(btn.frame.height - (spacing * 2))
targetWidth = targetHeight
}

UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight))
image.drawInRect(CGRectMake(0, 0, targetWidth, targetHeight))
scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

btn.setImage(scaledImage, forState: .Normal)
btn.setTitle("", forState: .Normal)
btn.tintColor = UIColor.blackColor()

由于图标是1:1,所以我使用相同的宽度和高度。但是对于另一个图标/图像,我也需要相同的(有效的)方法。我在 25、50 和 75pts 中为我的标签栏使用的任何其他图标/图像看起来都不错且清晰。我使用哪个模拟器也无关紧要,无论是 iPhone 4s 还是 6 Plus。

此外,是否还有其他解决方案?我曾尝试使用另一种全是地球仪的字体,但 XCode 不会在编辑器中列出它。我也尝试过在地球上绘制表情符号,使用 unicode 字符,但它被当作表情符号使用……所以……有什么帮助吗? :)

最佳答案

您的主要问题是 UIGraphicsBeginImageContext 不执行特定于设备的缩放。在@2x 屏幕上,每个点由单个像素而不是 2x2 像素正方形表示;它看起来像像素化,因为它确实如此。

切换到 UIGraphicsBeginImageContextWithOptions(size, NO, 0) 并提供足够大的值应该会使其呈现清晰。

另一个需要注意的问题是 PDF 资源在构建时而不是在应用程序中呈现为多种分辨率的 PNG 文件,因此如果您将 22x22 图像渲染为 20x20(例如)会导致一定程度的模糊您不会期望在设备上呈现矢量图像。

关于ios - UIButton 中的 UIImage 用矢量图像像素化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36897471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com