Я рисую график, используя CGPath, примененный к CAShapeLayer. Сам график нарисован отлично, но потом я хочу добавить под ним градиент. Моя проблема в том, что путь закрыт прямой линией, идущей от последней точки к первой (см. Ниже) - это сделало бы градиентную заливку совершенно нелепой.
Насколько я понимаю, единственный способ обойти эту проблему - нарисовать две дополнительные линии: одну от последней точки графика до правого нижнего угла, а оттуда другую - до нижнего левого угла. Это красиво закрыло бы путь, но добавило бы нижнюю строку к графику, чего я не хочу.
Если бы я использовал CGContext, я мог бы легко решить эту проблему, изменив цвет штриха на прозрачный для последних двух строк. Однако с приведенным ниже кодом я не понимаю, как это возможно.
CGMutablePathRef graphPath = CGPathCreateMutable();
for (NSUInteger i = 0; i < self.coordinates.count; i++) {
CGPoint coordinate = [self.coordinates[i] CGPointValue];
if (!i) {
CGPathMoveToPoint(graphPath, NULL, coordinate.x, coordinate.y);
} else {
CGPathAddLineToPoint(graphPath, NULL, coordinate.x, coordinate.y);
}
}
CAShapeLayer *graphLayer = [CAShapeLayer new];
graphLayer.path = graphPath;
graphLayer.strokeColor = [UIColor whiteColor].CGColor;
graphLayer.fillColor = [UIColor redColor].CGColor;
[self.layer addSublayer:graphLayer];
Я надеюсь, что вы, ребята, можете мне помочь!
Обновление: вы предлагаете создать CAGradientLayer, а затем применить слой графика в качестве его маски. Однако я не понимаю, как это будет работать, когда график / путь выглядит так, как он. Я заменил изображение выше другим графиком, который, надеюсь, лучше иллюстрирует проблему (обратите внимание, что я дал CAShapeLayer красную заливку). На мой взгляд, если бы я применил вышеупомянутый слой в качестве маски CAGradientLayer, часть градиента лежала бы над графиком, а часть - ниже. Я хочу, чтобы весь градиент располагался прямо под графиком.