2013-10-15 4 views
0

다음 코드는 ios6에서 잘 작동합니다. 보기에 위쪽 및 아래쪽 내부 알파 그라디언트를 적용해야합니다.iOS7에서 layer.mask 그래디언트가 단색입니다.

CAGradientLayer * gradient = [CAGradientLayer layer]; 
gradient.frame = self.bounds; 
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor clearColor] CGColor], 
        (id)[[UIColor whiteColor]CGColor], 
        (id)[[UIColor whiteColor]CGColor], 
        (id)[[UIColor clearColor] CGColor], 
        nil]; 

gradient.startPoint = CGPointMake(0.5, 0.0); 
gradient.endPoint = CGPointMake(0.5, 1.0); 
gradient.locations = [NSArray arrayWithObjects:@0,@(val),@(1.-val),@1,nil]; 

self.layer.mask = gradient; 

BUT! iOS7에서이 코드를 실행하면 좋은 그라데이션 알파 그라디언트 대신 그라디언트의 "투명한"부분이 흰색으로 나타납니다.

+0

하나의 문제는 색상이 색상 구성 요소의 수입니다. 흰색, 회색 및 검은 색은 2 가지 색상 구성 요소가 있지만 나머지는 4 가지입니다. 내장 색상 대신 흰색을 [UIColor colorWithRed : green : blue : alpha]로 변경하십시오. 도움이되지 않을 수도 있지만 시도해야 할 것입니다. – Putz1103

+0

응답 해 주셔서 감사합니다. I 시도 : 'gradient.colors의 =있는 NSArray의 arrayWithObjects : (ID) [UIColor colorWithRed : 0 녹색 0 청색 0 알파 : 0] CGColor] (ID) [UIColor colorWithRed : 0 녹색 0 : 0 파랑 : 0 알파 : 1] CGColor], (id) [[UIColor colorWithRed : 0 녹색 : 0 파랑 : 0 알파 : 1] CGColor] 0 알파 : 0] CGColor], nil]; ' 같은 결과가 나왔습니다. – Mephes

답변

2

나는 이것을 주석에 넣겠다. 그러나 포맷은 꺼져있을 것이다. 이 코드 스 니펫은 iOS 7에서 작동합니다. 필요에 맞게 수정할 수 있습니다. 그래도 작동하지 않는다면 그래디언트가 문제가 아니라고 말할 수 있습니다. 나는 색상에 내장 된 사용에 있었다

+(void)addScrollingGradientToView:(UIView*)view 
{ 
    //add in the gradient to show scrolling 
    CAGradientLayer *nextImageFade = [CAGradientLayer layer]; 
    nextImageFade.frame = CGRectInset(view.bounds,-10,-10); 

    nextImageFade.colors = [NSArray arrayWithObjects:(id)[UIColor colorWithRed:0. green:0. blue:0. alpha:0.].CGColor, 
          [UIColor colorWithRed:0. green:0. blue:0. alpha:1.0].CGColor, 
          [UIColor colorWithRed:0. green:0. blue:0. alpha:1.0].CGColor, 
          [UIColor colorWithRed:0. green:0. blue:0. alpha:0.0].CGColor,nil]; 
    nextImageFade.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], 
           [NSNumber numberWithFloat:20/view.frame.size.height], 
           [NSNumber numberWithFloat:(view.frame.size.height - 20)/view.frame.size.height], 
           [NSNumber numberWithFloat:1.], nil]; 
    nextImageFade.startPoint = CGPointMake(.5, 0); 
    nextImageFade.endPoint = CGPointMake(.5, 1); 

    //Put in the fading last so that it is above everything else 
    [view.layer setMask:nextImageFade]; 
} 
+0

당신은 완전히 옳습니다! 코드에 관한 것이 아니라 문제가 아니 었습니다. 부모보기의 배경색을 수동으로 설정하지 않았기 때문에 ios6에서 어떤 이유 때문에 기본값으로 지워졌습니다 (조부모 어두운 색이 알파를 벗어나므로) ios7의 기본값은 흰색입니다. – Mephes

관련 문제