У меня есть некоторый код, который я использую, чтобы заполнить представление линейным градиентом, я преобразовал это в вспомогательный метод. Это прекрасно работает на 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);
}
Я нашел большую часть этого кода здесь и работал отлично, пока не начал тестирование на старых версиях ОС, так как я близок к выпуску.