2011-06-14 3 views
2

내 UIScrollView의 텍스트를 페이드 인/아웃하기 위해 그라디언트를 추가하려고합니다. 나는 CAGradientLayer를 추가하라는 제안을 받았다. 저는 처음에 그라디언트와 드로잉을 처음 접했기 때문에 처음과 같이 모든 것을 커버하고 위쪽과 아래쪽 부분에 대해 걱정할 필요가 없다고 생각했습니다. 나는 이것을 시도했지만 UIScrollView의 UILabel 텍스트가 변경되지 않았으므로 정확하다고 생각하지 않습니다. 나는 올바른 길을 가고 있는가? 감사.UIScrollView에 그라디언트 추가

편집 : 나는 다른 RGB, 알파 값을 사용하여이 몇 가지 방법을 시도했습니다, 나는 그것이 텍스트가 페이드 아웃 오른쪽보고있는 것만 얻을 수

CAGradientLayer *gradient = [CAGradientLayer layer]; 
    CGColorRef darkColor = [[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.6] CGColor]; 
// CGColorRef darkColor = [[self.scrollView.backgroundColor colorWithAlphaComponent:0.5] CGColor]; 
// CGColorRef lightColor = [[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:0.6] CGColor]; 
    CGColorRef lightColor = [[self.scrollView.backgroundColor colorWithAlphaComponent:1.0] CGColor]; 
    CGRect gradientFrame = self.scrollView.bounds; 
    gradientFrame.size.height = 50; 
    gradient.frame = gradientFrame; 
    gradient.colors = [NSArray arrayWithObjects: (id)darkColor, (id)lightColor, nil]; 
    [self.scrollView.layer addSublayer:gradient]; 

. 0.0에서 1.0까지 alpha로 backgroundColor를 시도해 보았지만 어떤 변화도 보이지 않는다.

+0

먼저 'scrollView.backgroundColor'를 변경하여 추가 된 구성 요소의 투명성 .alpha 문제가 아닌지 확인하십시오. –

+0

backgroundColor를 다른 색상으로 변경했는데 그라데이션이 보입니다. 그러나 그것은 단지 내 전체 scrollView 영역에 적용되는 그라데이션입니다. 따라서 텍스트가 희미 해지는 대신 사각형처럼 보입니다. 그래서 backgroundColor를 사용해야한다고 가정하고 있습니다. 그러나 확실하지는 않습니다. 이견있는 사람? 감사. – Crystal

+0

'alpha '속성이 포함 된 코드를 더 게시하십시오. * 상상해 보는 것이 쉽지 않습니다. :) –

답변

2

스크롤 막대에 그라디언트를 추가하면 스크롤보기가 사라집니다. scrollviews superview에 추가하는 것이 트릭에 있어야합니다.

충분히 큰 경우 처음에는 여전히 표시되어야합니다.

이 나를 위해 작동합니다

+ (CAGradientLayer *)maskWithHorizontalFadingBordersWithinBounds:(CGRect)bounds 
{ 
    CAGradientLayer * maskLayer = [CAGradientLayer layer]; 

    id outerColor = (id)[UIColor colorWithWhite:1.0 alpha:0.0].CGColor; 
    id innerColor = (id)[UIColor colorWithWhite:1.0 alpha:1.0].CGColor; 

    maskLayer.colors = @[outerColor, innerColor, innerColor, outerColor]; 
    maskLayer.locations = @[@0.0  , @0.025 , @0.975 , @1.0]; 
    maskLayer.bounds = bounds; 
    maskLayer.anchorPoint = CGPointZero; 

    return maskLayer; 
} 

를 호출 appropiate 초기화 내에서이 방법을 필요 이상으로 자주 계층을 생성하지 않도록주의.

scrollViewsSuperView.layer.mask = [CAGradientLayer maskWithHorizontalFadingBordersWithinBounds:scrollView.bounds]; 

단점 : 스크롤바가 아직도이 간단한 솔루션을 선호도 영향을받습니다.

대안 : 스크롤 뷰 자체에 하층으로 마스크 을 추가 scrollViewDidScroll 0으로 그 위치를 재설정.

+0

나는 'UIView'에 'UIScrollView'를 내장하고, 지원하는 UIView에 마스크를 적용하는 편이 낫습니다. 하지만, 당신의 솔루션은 전체 뷰를 가로 지르는 후행 페이드 (fade) 문제를 해결했습니다 ... (3)'[outerColor, innerColor, ** innerColor **, outerColor] 대신에 (4) 색상이 필요하다는 것을 몰랐습니다. '. – Stan

관련 문제