菜鸟教程小白 发表于 2022-12-12 18:23:45

iphone - 在 rect 中绘制线性渐变适用于 iOS 5.x 但不适用于 4.x


                                            <p><p>我有一些代码用于用线性渐变填充 View ,我已将其重构为辅助方法。这在 iOS 5.x 上效果很好,但是当我尝试在 4.3.5 上运行时,我什么也没得到。我检查了所有的 CG 调用,它们都在 4.0 或更早版本上受支持,它看起来太简单了,我看不出为什么它在 4.x 上不起作用。</p>

<pre><code>- (void)drawRect:(CGRect)rect {

CGContextRef context = UIGraphicsGetCurrentContext();   
CGColorRef startColor = .CGColor;
CGColorRef endColor = .CGColor;   
CGRect paperRect = self.frame;
[GraphicsHelpers drawLinearGradientWithContext:context
                                        inRect:paperRect
                                    startColor:startColor
                                    endColor:endColor];
}
</code></pre>

<p>这是那个方法</p>

<pre><code>+ (void)drawLinearGradientWithContext:(CGContextRef)context inRect:(CGRect)rect startColor:(CGColorRef)startColor endColor:(CGColorRef)endColor {

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGFloat locations[] = { 0.0, 1.0 };

NSArray *colors = ;

CGGradientRef gradient = CGGradientCreateWithColors(colorSpace,
                                                    (__bridge CFArrayRef) colors, locations);

CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMinY(rect));
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), CGRectGetMaxY(rect));

CGContextSaveGState(context);
CGContextAddRect(context, rect);
CGContextClip(context);

CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
CGContextRestoreGState(context);

CGGradientRelease(gradient);
CGColorSpaceRelease(colorSpace);
</code></pre>

<p>}</p>

<p>我找到了这段代码的大部分 <a href="http://www.raywenderlich.com/2033/core-graphics-101-lines-rectangles-and-gradients" rel="noreferrer noopener nofollow">here</a>并且工作得很好,直到我接近发布时开始测试较旧的操作系统版本。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我遇到了同样的问题,<strike>解决了</strike>通过使用</p>创建渐变来解决它

<pre><code>CGGradientCreateWithColorComponents
</code></pre>

<p>.. 而不是 CGGradientCreateWithColors。</p>

<p>因此,对于从浅灰色到黑色的渐变,您需要执行以下操作:</p>

<pre><code>CGFloat colors = {
    0.9f, 0.9f, 0.9f, 1.0f, // light gray
    0.0f, 0.0f, 0.0f, 1.0f// black
};

CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, colors, locations, 2);
</code></pre>

<p>这适用于 iOS 4 和 5。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 在 rect 中绘制线性渐变适用于 iOS 5.x 但不适用于 4.x,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/8392516/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/8392516/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 在 rect 中绘制线性渐变适用于 iOS 5.x 但不适用于 4.x