无法让 CGGradientRef 使用 alpha

Posted

技术标签:

【中文标题】无法让 CGGradientRef 使用 alpha【英文标题】:Can't get CGGradientRef to work with alpha 【发布时间】:2014-03-07 18:48:31 【问题描述】:

我正在尝试对 UIView 应用 alpha 渐变,但根本无法让它工作。我当前的 drawRect: 方法看起来像这样 -

- (void)drawRect:(CGRect)rect

    CGContextRef currentContext = UIGraphicsGetCurrentContext();

    CGGradientRef alphaGradient;
    CGColorSpaceRef rgbColorSpace;
    size_t num_locations = 2;
    CGFloat locations[2] =  0.0, 1.0 ;
    CGFloat components[8] =  1.0, 1.0, 1.0, 1.0,  // Start color
    1.0, 1.0, 1.0, 0.0 ; // End color

    rgbColorSpace = CGColorSpaceCreateDeviceRGB();
    alphaGradient = CGGradientCreateWithColorComponents(rgbColorSpace, components, locations, num_locations);

    CGRect currentBounds = self.bounds;
    CGPoint bottomCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMaxY(currentBounds));
    CGPoint midCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMidY(currentBounds));
    CGContextDrawLinearGradient(currentContext, alphaGradient, midCenter, bottomCenter, 0);

    CGGradientRelease(alphaGradient);
    CGColorSpaceRelease(rgbColorSpace);

我确定我在这里缺少一些东西。我尝试将 RGB 值更改为 0.0 而不是 1.0,将颜色空间更改为灰度等。

任何为我指明正确方向的帮助将不胜感激。谢谢

【问题讨论】:

【参考方案1】:

我通过确保将视图的背景颜色设置为清除,然后将视图的图层作为蒙版应用到图像视图来解决此问题。

【讨论】:

【参考方案2】:

我使用 CAGradient:

UIView * viewToGradient = // view to add gradient
UIColor * color1 = [UIColor lightGrayColor]; // gradient color 1
UIColor * color2 = [UIColor clearColor]; // gradient color 2

CAGradientLayer * gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = viewToGradient.bounds;
gradientLayer.colors = [NSArray arrayWithObjects:(id)color1.CGColor, (id)color2.CGColor, nil];
gradientLayer.opacity = .6;
[viewToGradient.layer addSublayer:gradientLayer];

【讨论】:

我使用的是 CAGradientLayer,但我遇到的问题是它看起来不像我想要的那样平滑。不过,如果您不需要 CGGradient 的平滑度,它肯定效果很好 您是否尝试提高分辨率? [gradientLayer setContentsScale:[UIScreen mainScreen].scale];

以上是关于无法让 CGGradientRef 使用 alpha的主要内容,如果未能解决你的问题,请参考以下文章

个人作业3——个人总结(Alphe)

个人作业3——个人总结(Alphe)

如何让 str.translate 使用 Unicode 字符串?

最速下降法

我无法测试我在Google Play控制台上注册的应用

日益强大的人工智能OpenAI ChatGPT GPT-4真的会让程序员失业吗?