• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 18:23:45 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

- (void)drawRectCGRect)rect {

CGContextRef context = UIGraphicsGetCurrentContext();    
CGColorRef startColor = [UIColor lightGrayColor].CGColor;
CGColorRef endColor = [UIColor blackColor].CGColor;    
CGRect paperRect = self.frame;
[GraphicsHelpers drawLinearGradientWithContext:context 
                                        inRect:paperRect 
                                    startColor:startColor 
                                      endColor:endColor];
}

这是那个方法

+ (void)drawLinearGradientWithContextCGContextRef)context inRectCGRect)rect startColorCGColorRef)startColor endColorCGColorRef)endColor {

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

NSArray *colors = [NSArray arrayWithObjects__bridge id)startColor, (__bridge id)endColor, nil];

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);

}

我找到了这段代码的大部分 here并且工作得很好,直到我接近发布时开始测试较旧的操作系统版本。



Best Answer-推荐答案


我遇到了同样的问题,解决了通过使用

创建渐变来解决它
CGGradientCreateWithColorComponents

.. 而不是 CGGradientCreateWithColors。

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

CGFloat colors[8] = {
    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);

这适用于 iOS 4 和 5。

关于iphone - 在 rect 中绘制线性渐变适用于 iOS 5.x 但不适用于 4.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8392516/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap