2013-10-15 42 views
0

下一个代码在ios6中正常工作。它应该在视图中应用顶部和底部的内部alpha梯度:layer.mask渐变在iOS7中为实体

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; 

但是!如果我在iOS7中运行此代码,而不是一个很好的混合alpha梯度,渐变的“透明”部分是纯白色。

+0

我在使用内置颜色时遇到的一个问题是颜色具有的颜色成分的数量。白色,灰色和黑色有2种颜色分量,而其他颜色有4种。尝试将白色改为“[UIColor colorWithRed:green:blue:alpha]”,而不是内置颜色。它可能没有帮助,但可以尝试。 – Putz1103

+0

感谢您的回复。我想: 'gradient.colors = [NSArray的arrayWithObjects: (ID)[[的UIColor colorWithRed:0绿:0蓝色:0阿尔法:0] CGColor], (ID)[[的UIColor colorWithRed:0绿色:0 blue:0 alpha:1] CGColor], (id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:1] CGColor], (id)[[UIColor colorWithRed:0 green:0 blue: 0 alpha: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

你是完全正确的!但不涉及代码,那不是问题。 我没有手动设置父视图的背景颜色,由于某种原因,在iOS 6中它默认为清除(所以祖父母的暗色通过alpha发出),并且在ios7中默认为白色。 – Mephes