2010-11-17 48 views
17

Tôi đã một hình ảnh chuẩn bị với tính minh bạch, như thế này:Làm thế nào để duy trì tính minh bạch hình ảnh khi sử dụng colorWithPatternImage:

alt text

Với hai UIviews, tôi cấu hình các màu nền như vậy:

self.view.backgroundColor = [UIColor groupTableViewBackgroundColor]; 
self.dashedView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"red_square.png"]]; 

Tôi hy vọng hình vuông màu đỏ được lặp lại trên UIView với độ trong suốt được bảo tồn, nhưng nó được lấp đầy bởi một màu đồng nhất như sau:

alt text

Tôi không hiểu tại sao. Có cách nào đơn giản để vẽ hình ảnh lát gạch có độ trong suốt không? Hay tôi cần phải xem xét các mẫu vẽ đồ họa lõi?

Trả lời

25

Hình ảnh mẫu phải giữ độ trong suốt tốt.

Hãy thử [self.dashedView setOpaque:NO]

+0

Hoàn hảo, cảm ơn. Trước đây tôi đã thử điều này thông qua Interface Builder, và điều đó dường như không hoạt động. Tuy nhiên, thiết lập nó theo lập trình. – msmithstubbs

+0

Có một số vấn đề với các tùy chọn đó thông qua IB, tôi đã chạy vào một số lần. Tôi nghĩ rằng đó là một vấn đề khởi tạo có khả năng. –

+0

Đối với hậu thế, tôi thấy cần thiết phải đặt lớp là không mờ, ví dụ: [self.dashedView.layer setOpaque: NO]. Xem: http://stackoverflow.com/questions/4059487/iphone-uiviews-backgroundcolor-using-a-png-with-transparency – tba

3

Yar, cảm ơn phản hồi.

Tôi thấy điều này chỉ xảy ra trên iOS 4.3.x chứ không phải trên iOS 5.0.x. Vì vậy, trên 4.3.x tôi đã phải làm những gì Yar id và thiết lập mờ để NO, sau đó thiết lập hình ảnh nền, sau đó thiết lập để YES.

UIButton* cancelButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
cancelButton.opaque = YES; // fix for strange issue in 4.x, need to set YES, set bg color image, then set back to NO 
cancelButton.backgroundColor = [UIColor colorWithPatternImage: cancelImage]; 
cancelButton.opaque = NO; 
5

tất cả những gì bạn phải làm là đặt độ mờ thành NO sau khi đặt colorWithPatternHình ảnh.

self.dashedView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"red_square.png"]]; 
self.dashedView.opaque = NO; 
+1

Thật vậy, điều quan trọng đối với 4.3 là đặt Opaque sau khi thiết lập màu nền (hoặc hình ảnh trong trường hợp của UIImageView). –

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