【问题标题】:How to set the alpha of an UIImage in SWIFT programmatically?如何以编程方式在 SWIFT 中设置 UIImage 的 alpha?
【发布时间】:2015-02-14 16:52:15
【问题描述】:

我在这里找到了很多解决方案,但不适用于 Swift,而且我知道您可以使用 UIImageView 做到这一点,但在我的情况下,我需要为 以编程方式设置 alpha 透明背景图像用户界面按钮。最好是 UIImage 扩展!

let img = UIImage(named: "imageWithoutAlpha")
var imgInsets = UIEdgeInsetsMake(0, 24, 0, 24)
image = image!.resizableImageWithCapInsets(imgInsets)

let myButton = UIButton(frame: CGRect(x: 50, y: 50, width: img!.size.width, height: img!.size.height))
myButton.setBackgroundImage(img, forState: UIControlState.Normal)
myButton.contentEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 20)
myButton.setTitle("Startbutton", forState: UIControlState.Normal)
myButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
myButton.sizeToFit()
view.addSubview(myButton)

当前结果:

想要的结果:

【问题讨论】:

    标签: swift uibutton uiimage uicontrolstate


    【解决方案1】:

    幸运的是,我能够帮助自己,并想与您分享我的解决方案:

    斯威夫特 3

    // UIImage+Alpha.swift
    
    extension UIImage {  
    
        func alpha(_ value:CGFloat) -> UIImage {
            UIGraphicsBeginImageContextWithOptions(size, false, scale)
            draw(at: CGPoint.zero, blendMode: .normal, alpha: value)
            let newImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return newImage!   
        }
    }
    

    我将上述新的 Swift 扩展添加到我的项目中,然后我将 UIButton 示例更改如下,以获得透明度为 50% 的 alpha 透明背景图像。

    let img = UIImage(named: "imageWithoutAlpha")!.alpha(0.5)
    let myButton = UIButton()
    
    myButton.setBackgroundImage(img, for: .normal)
    

    【讨论】:

    • 在 swift 2 中,我不得不将 kCGBlendModeMultiply 替换为 CGBlendMode.Multiply,参见 stackoverflow.com/questions/31309521/…
    • 你能发布一个 swift 3 版本吗?
    • 添加了swift 3版本!
    • 这似乎忽略了颜色。我有一个带有颜色的图像,当我应用此方法时,生成的图像是灰色的(但它确实具有适当的 alpha)。
    • 在阅读developer.apple.com/library/content/documentation/… 的一些内容时,似乎 .normal 应该可以正常工作。还有其他人经历过这种“灰度”效应吗?
    【解决方案2】:

    最简单的方法是将您的 UIImage 放入 UIImageView 并在那里设置 alpha。

    let image = UIImage(named: "imageWithoutAlpha")
    let imageView = UIImageView(image: image)
    imageView.alpha = 0.5
    
    myButton.setBackgroundImage(image, forState: UIControlState.Normal)
    

    【讨论】:

    • 抱歉,这没有任何意义!
    • 究竟有什么不合理的地方?
    • 好吧,再试一次,因为它可以 100% 工作。在否决答案之前正确测试。
    • 回答另一个问题。问题不是“如何改变 UIImageView 的不透明度”。问题是“如何改变 UIImage 的 alpha”
    • 您正在创建imageView,但从不使用它。你不能通过UIButton.setBackgroundImage设置UIView。
    【解决方案3】:

    Swift 5、iOS 10+

    如果您的应用不支持 iOS 10 之前的操作系统,那么您可以利用更强大的 UIGraphicsImageRenderer UIKit 绘图 API。

    extension UIImage {
        func withAlpha(_ a: CGFloat) -> UIImage {
            return UIGraphicsImageRenderer(size: size, format: imageRendererFormat).image { (_) in
                draw(in: CGRect(origin: .zero, size: size), blendMode: .normal, alpha: a)
            }
        }
    }
    

    用法

    let img = UIImage(named: "someImage")?.withAlpha(0.5)
    

    【讨论】:

      【解决方案4】:

      我可以使用以下代码设置 alpha:

      self.imageView.image = UIImageView(image: "image.png")
      imageView.alpha = 0.5
      

      【讨论】:

      • 不知道为什么这被否决了:事实证明它对我来说很容易解决。
      • 回答另一个问题。问题不是“如何改变 UIImageView 的不透明度”。问题是“如何改变 UIImage 的 alpha”
      猜你喜欢
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      相关资源
      最近更新 更多