gpt4 book ai didi

ios - 100个UIButton背景图片的最佳性能解决方案

转载 作者:行者123 更新时间:2023-11-30 14:01:48 26 4
gpt4 key购买 nike

我有一个 UICollectionView,大约有 100 个单元格,每个单元格内都有一个圆形按钮。每行 5 个单元格,因此我必须向下和向上滚动才能选择按钮。

选择按钮后,背景图像会发生变化。我已经通过以下几种方式做到了这一点。也许这不是一个非常苛刻的观点,但我想知道在性能方面什么是更便宜的方法。

我发现的一个解决方案是使用 UIImage 的扩展并设置 button.layer.cornerRadius 如下:

extension UIImage {
class func imageWithColor(color: UIColor?) -> UIImage! {
let rect = CGRectMake(0.0, 0.0, 1.0, 1.0)

UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
let context = UIGraphicsGetCurrentContext();

if let color = color {
color.setFill()
}
else {
UIColor.whiteColor().setFill()
}

CGContextFillRect(context, rect);

let image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return image
}

然后,设置按钮图像背景:

button.layer.cornerRadius = (cell.bounds.width - 8) / 2
button.clipsToBounds = true
button.setBackgroundImage(UIImage.imageWithColor(UIColor.greenColor()), forState: UIControlState.Selected)

我听说设置 layer.cornerRadius 的成本非常高。

另一种方法是在 Photoshop 或类似工具中设计一个方形图像,中间有一个圆圈,让其余部分透明并将其设置为按钮背景。

或者另一种选择,我还没有尝试过,我认为它可以制作一个带有颜色的 1 x 1 像素图像并将背景填充设置为平铺(我仍然没有检查这个的代码) 。但我认为这与第一种方式非常相似。

您会解决使用任何软件衡量性能的问题还是只是更深入地了解 Swift 语言?

最佳答案

尝试对图像应用蒙版。这样做更好,因为您可以为每个图像执行一次。这不应该影响滚动性能。只有您需要的是掩模图像。它应该是白色背景和中间黑色圆圈的方形图像。 Here你可以找到例子(obj-c)。 swift :

extension UIImage {
func maskedImage(mask: UIImage) -> UIImage {
let maskImgRef = mask.CGImage
let maskRef = CGImageMaskCreate(CGImageGetWidth(maskImgRef), CGImageGetHeight(maskImgRef), CGImageGetBitsPerComponent(maskImgRef), CGImageGetBitsPerPixel(maskImgRef), CGImageGetBytesPerRow(maskImgRef), CGImageGetDataProvider(maskImgRef), nil, false)
if let maskedRef = CGImageCreateWithMask(self.CGImage, maskRef) {
let maskedIm = UIImage(CGImage: maskedRef)
UIGraphicsBeginImageContext(maskedIm.size)
maskedIm.drawInRect(CGRect(origin: CGPointZero, size: maskedIm.size))
let img = UIGraphicsGetImageFromCurrentImageContext()
return img
}
return self
}
}

UPD:如果您的图像不是单色的,上面的代码会很有帮助。如果它们是单色的,您可以将 UIButtons 与系统类型一起使用,而不是 ImageViews。只需禁用userInteraction,为此按钮设置圆形图像并操作tintColor

关于ios - 100个UIButton背景图片的最佳性能解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32910558/

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