2011-11-01 3 views
13

나는 그림자로 사용하고있는 CAGradientLayer가 있습니다. 60 % 불투명도에서 왼쪽에서 오른쪽으로 사라집니다.그림자로 사용되는 혼합 CAGradientLayer

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

그것의 그림자의 매우 끝에서 1 픽셀 폭 "빛"이있다 : 그래디언트의 가장자리에, 그것은 아래의 층과 혼합하고 층을 경감 될 것으로 보인다 퇴색했다. 그것은 그림자 뒤의 사진을 밝게 만드는 것 같습니다.

enter image description here

이 그림자 것을 생성하는 코드는 다음과 같습니다 : 여기 근접 촬영의

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; 

그 제거하는 방법에 어떤 아이디어가?

답변

22

눈이 당신을 속이고 있습니다. 그라디언트의 가장자리에는 강도가 증가하지 않습니다. 확인할 수 있습니다. 구름 영역에서 1 픽셀 높이로 이미지를 축소하여 색상 값을 확인했습니다. image shrunk to 1px height

그러나 밝은 선이 보이는 이유는 그림자가 그렇게 보이지 않기 때문입니다. 예상 할 수있는 투명도 프로파일은 직선 (가령 선형 그래디언트)보다 가우스 (Gaussian)에 더 가깝습니다.

투명 영역에 그라디언트를 쉽게 추가하려면 몇 가지 추가 점을 추가하는 것이 좋습니다. 아마도 이런 식으로

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]; 

이 여분의 혼합을 수용하기 위해 그라디언트의 크기를 늘려야 할 수도 있습니다.