【问题标题】:iOS: How to replace a specific color by another in a UIImage of a TabBar (select and unselect)?iOS:如何在 TabBar 的 UIImage 中用另一种颜色替换特定颜色(选择和取消选择)?
【发布时间】:2020-09-04 17:47:52
【问题描述】:

当它被选中时,我想在我的 UITabBar 中用另一种颜色替换它。目的是获得一张我可以通过编程方式更改颜色的图像。

我该怎么做?

let tabBarItem = UITabBarItem(title: menuName, image: unselectedImage, selectedImage: selectedImage)  

我检查了没有成功的票:
link1, link2

【问题讨论】:

  • 您是否尝试过在 .xcaccess 中或以编程方式将渲染模式设置为 Template 并将 tint 颜色更改为渲染图像的 imageView 或更改 tabor tintColor

标签: ios swift uitabbar uigraphicscontext


【解决方案1】:

我遇到了同样的问题。您应该创建一个背景白色 png,并将其他图像放在顶部 带有半透明背景 png。

(而且我认为你应该使用质量更好的图像,因为你的照片看起来很奇怪)

                let iconWhite: UIImage? = self.load(fileName: "APP/icones/\(iconName).png")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
                        
                        
        //UNSELECT IMAGE
                        var unselectedImgBack = UIImage(named: "white.png")
                        var unselectedImgFront = iconWhite?.overlayImage(color: UIColor.black)
                        
                        let size = unselectedImgFront?.size
                        unselectedImgBack = unselectedImgBack?.resized(to: size!)
                        UIGraphicsBeginImageContext(size!)
                        let areaSize = CGRect(x: 0, y: 0, width: size!.width, height: size!.height)
                        unselectedImgBack!.draw(in: areaSize)
                        unselectedImgFront!.draw(in: areaSize, blendMode: .normal, alpha: 1)
                        unselectedImgFront = UIGraphicsGetImageFromCurrentImageContext()!
                        UIGraphicsEndImageContext()
                        
                        let unselectedImage =  unselectedImgFront!.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
                        
        //SELECT IMAGE
                        
                        var selectedImgBack = UIImage(named: "white.png")
                        var selectedImgFront = iconWhite
                        
                        let scanner2 = Scanner(string: color)
                        var value: UInt64 = 0
                        
                        if scanner2.scanHexInt64(&value) {
                            print("Decimal: \(value)")
                            print("Hex: 0x\(String(value, radix: 16))")
                        }
                        selectedImgBack = selectedImgBack?.overlayImage(color: UIColor.init(rgb: Int(value)))

                        selectedImgBack = selectedImgBack?.resized(to: size!)
                        UIGraphicsBeginImageContext(size!)
                        selectedImgBack!.draw(in: areaSize)
                        selectedImgFront!.draw(in: areaSize, blendMode: .normal, alpha: 0.8)
                        selectedImgFront = UIGraphicsGetImageFromCurrentImageContext()!
                        UIGraphicsEndImageContext()
                        
                        let selectedImage = selectedImgFront!.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)

【讨论】:

  • 像魅力一样工作,谢谢。 (对于图片,我会将您的评论转发给绘图员:D)
猜你喜欢
  • 2014-05-07
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 2015-02-12
  • 2017-10-05
  • 1970-01-01
  • 2016-05-30
相关资源
最近更新 更多