2011-11-01 31 views
13

Tôi có một CAGradientLayer tôi đang sử dụng như một cái bóng. Nó mờ dần từ độ mờ đục 60% đến rõ ràng, trái sang phải. Trên các cạnh của gradient, nó dường như được pha trộn với các lớp bên dưới nó và sét mà lớp:Pha trộn CAGradientLayer được sử dụng làm bóng

Notice the ~1 pixel wide lightened effect on the photo beneath the shadow

Có một pixel rộng "ánh sáng" ở cuối của bóng tối, nơi nó phai mờ. Dường như làm cho bức ảnh đằng sau cái bóng sáng hơn ở đuôi của cái bóng. Dưới đây là một close-up:

enter image description here

Đây là mã sản xuất mà bóng:

CAGradientLayer *layer = [CAGradientLayer layer]; 
layer.frame = CGRectMake(sideBar.frame.size.width, 0, 7, sideBar.frame.size.height); 
layer.colors = [NSArray arrayWithObjects: 
       (id)[[[UIColor blackColor] colorWithAlphaComponent:0.6f] CGColor], 
       (id)[[UIColor clearColor] CGColor], 
       nil]; 
[layer setStartPoint:CGPointMake(0, 0.5)]; 
[layer setEndPoint:CGPointMake(1, 0.5)]; 
[sideBar.layer insertSublayer:layer atIndex:0]; 
sideBar.layer.masksToBounds = NO; 

Bất kỳ ý tưởng về làm thế nào để thoát khỏi điều đó?

Trả lời

22

Đôi mắt của bạn đang lừa dối bạn. Không có sự gia tăng cường độ ở các cạnh của gradient. Bạn có thể kiểm tra - tôi thu nhỏ hình ảnh thành độ cao 1px trong vùng đám mây và xem xét các giá trị màu. image shrunk to 1px height

Tuy nhiên, lý do bạn nhìn thấy đường sáng là bóng không giống như vậy. Hồ sơ minh bạch mà bạn mong muốn thấy sẽ gần gũi hơn với một gaussian so với một đường thẳng (đó là những gì gradient tuyến tính làm).

Tôi khuyên bạn nên thêm một vài điểm bổ sung để giảm độ dốc vào vùng trong suốt. Có lẽ một cái gì đó như thế này

layer.colors = [NSArray arrayWithObjects: 
       (id)[[[UIColor blackColor] colorWithAlphaComponent:0.6f] CGColor], 
       (id)[[[UIColor blackColor] colorWithAlphaComponent:0.3f] CGColor], 
       (id)[[[UIColor blackColor] colorWithAlphaComponent:0.1f] CGColor], 
       (id)[[UIColor clearColor] CGColor], 
       nil]; 

Bạn có thể phải tăng kích thước của gradient để chứa thêm hỗn hợp này.

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