2012-05-30 35 views
20

Tôi có chế độ xem có CALayer. Khi tôi tạo một CAGradientLayer và áp dụng nó như là mặt nạ của CALayer của khung nhìn đó, không có gì xảy ra. Tại sao?Làm thế nào để áp dụng CAGradientLayer làm mặt nạ của một CALayer khác?

Trong -initWithFrame: các quan điểm tôi làm điều này:

CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = self.bounds; 
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil]; 
//[self.layer insertSublayer:gradient atIndex:0]; 
self.layer.mask = gradient; 

Nếu tôi thay

self.layer.mask = gradient; 

với

[self.layer insertSublayer:gradient atIndex:0]; 

sau đó tôi thấy gradient. Nó từ đen sang trắng.

Bí quyết là gì?

+0

Đối với những người khác rằng đấu tranh với Gradient Mask, nó sẽ không hoạt động nếu áp dụng cho một 'UIStackView '. –

Trả lời

33

Thuộc tính mặt nạ trên CALayer sử dụng thành phần alpha của lớp mặt nạ để xác định nội dung nào sẽ hiển thị và không hiển thị. Vì cả hai màu của bạn (đen và trắng) hoàn toàn mờ đục (không có độ trong suốt) nên mặt nạ không có hiệu lực. Để khắc phục điều này, bạn nên thay đổi một trong những màu sắc để một màu rõ ràng:

gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], 
              (id)[[UIColor clearColor] CGColor], nil]; 

Đó là "lừa": D

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