我有一些代码用于用线性渐变填充 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-推荐答案 strong>
我遇到了同样的问题,解决了通过使用 创建渐变来解决它
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/
|