2011-06-28 8 views
0

を働いていない私は、次のUIViewカスタムクラスを持っている:カスタム勾配BackgroundViewは

@implementation BackgroundView 

- (void)drawRect:(CGRect)rect 
{ 

    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

    CGGradientRef glossGradient; 
    CGColorSpaceRef rgbColorspace; 
    size_t num_locations = 2; 
    CGFloat locations[2] = { 0.0, 1.0 }; 

    float r = (255.0)/(255.0); 
    float g = (165.0)/(255.0); 
    float b = (0.0)/(255.0); 

    float rr = (238.0)/(255.0); 
    float gg = (118.0)/(255.0); 
    float bb = (0.0)/(255.0); 

    CGFloat components[8] = { r, g, b, 1.0, // Start color 
     rr, gg, bb, 1.0 }; // End color 

    rgbColorspace = CGColorSpaceCreateDeviceRGB(); 
    glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations); 

    CGRect currentBounds = self.bounds; 
    CGPoint topCenter = CGPointMake(CGRectGetMidX(currentBounds), 0.0f); 
    CGPoint midCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMidY(currentBounds)); 
    CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, 0); 

    CGGradientRelease(glossGradient); 
    CGColorSpaceRelease(rgbColorspace); 
} 


@end 

基本的にはオレンジ色のグラデーションを作ることになっています。値 "r"、 "g"、 "b"は明るいオレンジ色、 "rr"、 "gg"、 "bb"は濃いオレンジ色の値です。しかし、それは動作しません。フレームの上部のみがオレンジ色で、フレームの下部は黒です。私は黒を取り除くことができない。

オレンジ色のグラデーションにはどのような値を使用しますか?誰かが間違いを探すことができますか?私は何も見つけることができません。本当にありがとう!あなたはグラデーションの終点がcurrentBoundsの途中であることを指定するためだ

答えて

0

- この行以下を参照してください黒を取り除くために

CGPoint midCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMidY(currentBounds)); 

をy座標を確認するには、あなたの一番下にありますビュー。

代わりに、エンドポイントの後に、あなたのグラデーションを拡張するために、このコードを使用することができ

CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, kCGGradientDrawsAfterEndLocation);