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

- (void)drawRect:(CGRect)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)drawLinearGradientWithContext:(CGContextRef)context inRect:(CGRect)rect startColor:(CGColorRef)startColor endColor:(CGColorRef)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,并且在我即将发布较早版本的OS之前,一直很好地工作。

最佳答案

如果您使用的是受支持的API,并且从一个版本的操作系统到另一个版本获得的结果不同,请提交错误报告。

10-08 12:09