2015-02-14 5 views
17

Я нашел много решений здесь, но не для SWIFT, и я знаю, что вы можете сделать это с помощью UIImageView, но в моем случае мне нужно программно заданное альфа-прозрачное фоновое изображение для UIButton. Лучшим было бы расширение UIImage для SWIFT!Как настроить альфа UIImage в SWIFT программно?

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) 

Текущий результат:

current

Желаемый результат:

desired

ответ

52

К счастью, я был в состоянии помочь себе, и хотел бы поделиться с вами моим решением:

Свифт 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%.

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

myButton.setBackgroundImage(img, for: .normal) 
+12

В быстром 2 я должен был заменить kCGBlendModeMultiply с CGBlendMode.Multiply см http://stackoverflow.com/questions/31309521/error-use-of-unresolved-identifier-kcgblendmodemultiply – ChucK

+0

можете ли вы опубликовать версию с быстрым 3? – Patonz

+1

swift 3 версия добавлен! –

13

Самый простой способ положить ваши UIImage Внутри UIImageView и установить альфа там.

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

myButton.setBackgroundImage(image, forState: UIControlState.Normal) 
+1

извините, но это не имеет смысла! –

+0

Что конкретно не имеет смысла? – leonarth

+0

Я пробовал ваше решение, но прозрачность/непрозрачность фонового изображения не изменится –

4

Я был в состоянии установить альфа, используя следующий код:

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

Не знаете, почему это было пропущено: это оказалось для меня легким решением. – dumbledad

+4

Ответить на другой вопрос. Вопрос не в том, «как изменить непрозрачность UIImageView». Вопрос: «Как изменить альфа UIImage» – Add080bbA

Смежные вопросы