2015-02-14 21 views
17

Tôi tìm thấy nhiều giải pháp ở đây nhưng không cho SWIFT, và tôi biết bạn có thể làm điều này với UIImageView, nhưng trong trường hợp của tôi, tôi cần một hình nền trong suốt có lập trình alpha cho UIButton. Tốt nhất sẽ là một phần mở rộng UIImage cho SWIFT!Cách đặt alpha của UIImage trong SWIFT theo lập trình?

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) 

kết quả hiện tại:

current

mong muốn kết quả:

desired

Trả lời

52

May mắn tôi đã có thể giúp bản thân mình và muốn chia sẻ với bạn giải pháp của tôi:

Swift 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! 
    } 
} 

Việc gia hạn Swift mới ở trên tôi đã thêm vào dự án của tôi và sau đó tôi đã thay đổi ví dụ UIButton như sau, để có một hình ảnh nền trong suốt alpha với tính minh bạch của 50%.

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

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

Trong nhanh chóng 2 tôi đã phải thay kCGBlendModeMultiply với CGBlendMode.Multiply, xem http://stackoverflow.com/questions/31309521/error-use-of-unresolved-identifier-kcgblendmodemultiply – ChucK

+0

bạn có thể đăng phiên bản 3 nhanh không? – Patonz

+1

swift 3 phiên bản được thêm vào! –

13

Cách đơn giản nhất là đặt của bạn UIImage bên trong một UIImageView và thiết lập alpha ở đó.

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

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

xin lỗi, nhưng điều đó không có ý nghĩa gì cả! –

+0

Chính xác thì không có ý nghĩa gì? – leonarth

+0

tôi đã cố gắng giải pháp của bạn, nhưng tính minh bạch/opacity của hình nền sẽ không thay đổi –

4

tôi đã có thể thiết lập các alpha sử dụng đoạn mã sau:

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

Không chắc tại sao điều này đã xuống bình chọn: nó chứng minh một sửa chữa dễ dàng đối với tôi. – dumbledad

+4

Trả lời cho một câu hỏi khác. Câu hỏi không phải là "làm thế nào để thay đổi độ mờ đục của UIImageView". Câu hỏi là "cách thay đổi alpha của UIImage" – Add080bbA

Các vấn đề liên quan