3

메인 화면에 스크롤하는 텍스트가있는 iOS 앱이 있습니다. 화면 맨 아래에 텍스트가 희미 해지기를 원합니다. 그래서 사용자 지정보기를 만들 drawRect에서 같은 것을 할 : iOS에서 흰색 위에 투명한 흰색 그라디언트 그리기

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

CGFloat gradLocs[] = {0, 1}; 
CGColor *color1 = [UIColor clearColor].CGColor; 
CGColor *color2 = [UIColor whiteColor].CGColor; 
CFArrayRef arr = (CFArrayRef)@[(id)color1, (id)color2]; 
CGGradientRef grad = CGGradientCreateWithColors(colorSpace, arr, gradLocs); 

CGContextSaveGState(context); 
CGContextDrawLinearGradient(context, grad, CGPointMake(0, 0), CGPointMake(0, rect.size.height), 0); 
CGContextRestoreGState(context); 

는 기본적으로,보기를 통해 흰색으로 명확에서 선형 그라데이션을 그립니다. 나는 또한 CAGradientLayer으로 그 일을 시도했습니다

CAGradientLayer *layer = [CAGradientLayer layer]; 
layer.colors = @[(id)[UIColor clearColor].CGColor, (id)[UIColor whiteColor].CGColor]; 
layer.locations = @[@(0), @(1)]; 
layer.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height); 
[self.layer insertSublayer:layer atIndex:0]; 

어느 쪽이든을,이 흰색의 맨 위에 그려 얻는 경우에, 나는 회색 얻는다. 왜이

PaintCode screenshot

입니다 : PaintCode는 같은 일을 보여줍니다? 그라데이션이 흰색 위에 전혀 보이지 않아야하는 것처럼 보입니다.

답변

13

+[UIColor clearColor]은 사실 투명한 검정색입니다. 당신이 투명한 흰색을 원하기 때문에 당신은 사용해야

color1 = [[UIColor whiteColor] colorWithAlphaComponent:0.0].CGColor; 

을주의 깊게 +[UIColor clearColor]하는 것이 0.0 값은 그레이 스케일 및 알파와 색상을 반환 것이라고 말했다 당신은 설명서를 참조하십시오. 그래디언트에서 흰색에서 투명까지의 중간은 [UIColor initWithWhite:0.5 alpha:0.5] 즉 투명 회색입니다.