菜鸟教程小白 发表于 2022-12-12 18:09:07

ios - 如何在 iOS 中使用渐变创建叠加颜色


                                            <p><p>背景信息:我有一个 <code>UIImageView</code>。我通过以下方式在其图像上添加了叠加颜色:</p>

<pre><code>UIGraphicsBeginImageContext(initialImage.size);
;
UIBezierPath * path = ;
;
;
finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

;
</code></pre>

<p>我仍然想将其添加为叠加颜色,但我希望它具有渐变色。我一直在想办法做到这一点,但并没有真正成功。我想,添加带有渐变的叠加颜色的方法是错误的?我不确定如何做到这一点。我试图将 <code>CGGradientLayer</code> 作为 <code>sublayer</code> 添加到 <code>UIImageView</code> 但它不起作用。</p>

<p>我想过添加一个 <code>UIView</code> 并将其设置为 <code>backgroundColor</code> 作为 <code>overlayColor</code> 然后添加一个 <code>CGGradientLayer</code> 作为<code>UIView</code> 的 <code>sublayer</code> 作为 <code>subview</code> 添加到 <code>UIImageView</code> 但是,我们不应该添加 <code> subview </code>到<code>UIImageViews</code>。</p>

<p>有人可以帮我解决这个问题吗?也许我应该改变我的方法?</p>

<p>为我指明正确的方向也很棒!</p>

<p>如果这篇文章没有完全清楚,我期待您的回复和道歉!</p>

<p>提前感谢您的帮助!</p>

<p>编辑:<code>CGGradientLayer</code></p> 的代码

<pre><code>CAGradientLayer *gradient = ;
gradient.frame = self.frame;

UIColor *colorOne = ;
UIColor *colorTwo = ;

gradient.colors = ;

;
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我会使用 Core Graphics 来获取您的输入图像,对其应用渐变叠加,然后将其传递到 <code>UIImageView</code>。这样的事情应该可以达到预期的效果:</p>

<pre><code>- (UIImage *)imageWithGradientOverlay:(UIImage *)sourceImage color1:(UIColor *)color1 color2:(UIColor *)color2 gradPointA:(CGPoint)pointA gradPointB:(CGPoint)pointB {

    CGSize size = sourceImage.size;

    // Start context
    UIGraphicsBeginImageContext(size);
    CGContextRef c = UIGraphicsGetCurrentContext();

    // Draw source image into context
    CGContextDrawImage(c, (CGRect){CGPointZero, size}, sourceImage.CGImage);

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGFloat gradLocs[] = {0, 1};
    NSArray *colors = @[(id)color1.CGColor, (id)color2.CGColor];

    // Create a simple linear gradient with the colors provided.
    CGGradientRef grad = CGGradientCreateWithColors(colorSpace, (__bridge CFArrayRef)colors, gradLocs);
    CGColorSpaceRelease(colorSpace);

    // Draw gradient with multiply blend mode over the source image
    CGContextSetBlendMode(c, kCGBlendModeMultiply);
    CGContextDrawLinearGradient(c, grad, pointA, pointB, 0);
    CGGradientRelease(grad);

    // Grab resulting image from context
    UIImage *resultImg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return resultImg;
}
</code></pre>

<p>这里 <code>sourceImage</code> 是输入图像,<code>color1</code> 和 <code>color2</code> 是您的渐变颜色,<code>gradPointA</code> 和<code>gradPointB</code> 是您的线性渐变端点(在 Core Graphics 坐标系中,左下角为 (0,0))。</p>

<p>这样您就不必再弄乱图层了。如果您经常用不同的颜色重新绘制,那么您可能需要采用使用图层的方法。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在 iOS 中使用渐变创建叠加颜色,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34768956/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34768956/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在 iOS 中使用渐变创建叠加颜色