如何以编程方式在SWIFT中设置UIImage的alpha值?

Pet*_*inz 30 uibutton uiimage uicontrolstate swift

我在这里找到了很多解决方案,但不是Swift,我知道你可以使用UIImageView做到这一点,但在我的情况下,我需要以编程方式为UIButton设置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)
Run Code Online (Sandbox Code Playgroud)

目前的结果:

当前

期望的结果:

期望

Pet*_*inz 76

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

斯威夫特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!   
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

myButton.setBackgroundImage(img, for: .normal)
Run Code Online (Sandbox Code Playgroud)

  • 在swift 2中,我不得不用CGBlendMode.Multiply替换kCGBlendModeMultiply,请参阅http://stackoverflow.com/questions/31309521/error-use-of-unresolved-identifier-kcgblendmodemultiply (12认同)

Leo*_*rdo 25

最简单的方法是将你的UIImage内部UIImageView设置为a 并在那里设置alpha.

let image = UIImage(named: "imageWithoutAlpha")
let imageView = UIImageView(image: image)
imageView.alpha = 0.5

myButton.setBackgroundImage(image, forState: UIControlState.Normal)
Run Code Online (Sandbox Code Playgroud)

  • 回答另一个问题.问题不是"如何改变UIImageView的不透明度".问题是"如何改变UIImage的alpha" (9认同)
  • 对不起,但这没有意义! (4认同)
  • 好吧,再试一次,因为它100%有效.在低估答案之前正确测试. (3认同)
  • 您正在创建“imageView”,但从未使用过它。您无法通过“UIButton.setBackgroundImage”设置UIView。 (3认同)

bso*_*sod 9

斯威夫特 5,iOS 10+

如果您的应用不支持 iOS 10 之前的操作系统,那么您可以利用更强大的UIGraphicsImageRendererUIKit 绘图 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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法

let img = UIImage(named: "someImage")?.withAlpha(0.5)
Run Code Online (Sandbox Code Playgroud)


Big*_*t11 8

我能够使用以下代码设置alpha:

self.imageView.image = UIImageView(image: "image.png")
imageView.alpha = 0.5
Run Code Online (Sandbox Code Playgroud)

  • 回答另一个问题.问题不是"如何改变UIImageView的不透明度".问题是"如何改变UIImage的alpha" (11认同)