2014-02-08 37 views
0

我看了幾個在線鏈接來實現我的應用程序中我的UINavigationBar上的顏色漸變。CGGradient不能在UINavigationBar

我做了一個類別UINavigationBar並稱之爲UINavigationBar+Gradient。這裏是代碼爲:

#define MAIN_COLOR_COMPONENTS  { 0.153, 0.306, 0.553, 1.0, 0.122, 0.247, 0.482, 1.0 } 
#define LIGHT_COLOR_COMPONENTS  { 0.478, 0.573, 0.725, 1.0, 0.216, 0.357, 0.584, 1.0 } 

@implementation UINavigationBar (UINavigationBar+Gradient) 

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

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

    CGFloat topComponents[8] = LIGHT_COLOR_COMPONENTS; 
    CGGradientRef topGradient = CGGradientCreateWithColorComponents(myColorspace, topComponents, locations, 2); 
    CGContextDrawLinearGradient(context, topGradient, CGPointMake(0, 0), CGPointMake(0,self.frame.size.height/2), 0); 
    CGGradientRelease(topGradient); 

    CGFloat botComponents[8] = MAIN_COLOR_COMPONENTS; 
    CGGradientRef botGradient = CGGradientCreateWithColorComponents(myColorspace, botComponents, locations, 2); 
    CGContextDrawLinearGradient(context, botGradient, 
           CGPointMake(0,self.frame.size.height/2), CGPointMake(0, self.frame.size.height), 0); 
    CGGradientRelease(botGradient); 

    CGColorSpaceRelease(myColorspace); 


    // top Line 
    CGContextSetRGBStrokeColor(context, 1, 1, 1, 1.0); 
    CGContextMoveToPoint(context, 0, 0); 
    CGContextAddLineToPoint(context, self.frame.size.width, 0); 
    CGContextStrokePath(context); 

    // bottom line 
    CGContextSetRGBStrokeColor(context, 0, 0, 0, 1.0); 
    CGContextMoveToPoint(context, 0, self.frame.size.height); 
    CGContextAddLineToPoint(context, self.frame.size.width, self.frame.size.height); 
    CGContextStrokePath(context); 
} 

但是,我仍然得到iOS模擬器中的默認灰色導航欄。爲什麼?

回答