iOS рисует градиент в части вида - PullRequest
1 голос
/ 29 декабря 2011

Я создал пользовательский индикатор выполнения, который подкласс UIView и реализует drawRect.Мне удается нарисовать один градиент на весь вид.Однако я хотел бы нарисовать несколько разных градиентов, каждый в своей позиции.Как ограничить CGContextDrawLinearGradient меньшим прямоугольником внутри моего вида?

glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations);
CGPoint topCenter = CGPointMake(start + (CGRectGetMidX(currentBounds)/currentBounds.size.width), 0.0f);`
        CGPoint midCenter = CGPointMake(start + (CGRectGetMidX(currentBounds)/currentBounds.size.width), currentBounds.size.height);
        CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, 0);
        start = start + (values[i] / currentBounds.size.width);
        CGGradientRelease(glossGradient);
    }

Ответы [ 2 ]

4 голосов
/ 29 декабря 2011

Вы можете использовать CGContectClipToRect для ограничения области рисования

Затем для каждого градиента выполните:

CGContextSaveGState(currentContext);
CGContextClipToRect(theRect); // theRect should be the area where you want to draw the gradient
... // gradient drawing code
CGContextRestoreGState(currentContext);
3 голосов
/ 29 декабря 2011

Как указано в Руководство по программированию в Quartz 2D :

Когда вы рисуете градиент, Quartz заполняет текущий контекст.Рисование градиента отличается от работы с цветами и узорами, которые используются для обводки и заливки объектов контура.В результате, если вы хотите, чтобы ваш градиент отображался в определенной форме, вам необходимо соответствующим образом обрезать контекст.

Поскольку вы хотите нарисовать каждый градиент в прямоугольнике, вам нужно будет что-то сделатьвот так для каждого градиента и прямоугольника:

CGContextSaveGState(currentContext); {
    CGContextClipToRect(currentContext, currentBounds);
    CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, 0);
} CGContextRestoreGState(currentContext);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...