Пользовательский градиент BackgroundView для iOS не работает - PullRequest
0 голосов
/ 28 июня 2011

У меня есть следующий пользовательский класс UIView:

@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» для темно-оранжевого цвета. Но это не работает. Только верхняя часть рамки оранжевого цвета, а нижняя часть рамки черного цвета. Кажется, я не могу избавиться от черного.

Какие значения я бы использовал для оранжевого красивого градиента. Может кто-нибудь, пожалуйста, поищите ошибки? Я не могу найти ни одного. Большое спасибо!

1 Ответ

0 голосов
/ 28 июня 2011

Это потому, что вы указываете, что конечная точка для вашего градиента находится в середине currentBounds - смотрите эту строку:

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

Чтобы избавиться от черного, убедитесь, что координата y находится внизуваш взгляд.

Кроме того, вы можете использовать этот код для расширения градиента после конечной точки

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