我有一些代碼用於用線性漸變填充視圖,我已將它重構爲輔助方法。這在iOS 5.x上畫得很好,但是當我嘗試在4.3.5上運行時,我什麼也沒得到。我已經檢查過所有的CG調用,並且它們都支持4.0或更高版本,它看起來非常簡單,我看不出它爲什麼在4.x上不起作用。在rect中繪製線性漸變在iOS 5.x上工作,但不是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的和是偉大的工作,直到我開始對舊的操作系統版本測試,我親近的釋放。
對於您的paperRect,我會使用'self.bounds'而不是'self.frame'。 –