В приложении я рисую изогнутый UIBezierPath класс MKOverlayPathView для отображения маршрутов полета. Это код, я использую:Нарисуйте градиент вдоль изогнутого UIBezierPath
- (UIBezierPath *)pathForOverlayForMapRect:(MKMapRect)mapRect { ... bla bla bla ... UIBezierPath *path = [UIBezierPath bezierPath]; [path moveToPoint:s]; [path addQuadCurveToPoint:e controlPoint:cp1]; [path addLineToPoint:e2]; [path addQuadCurveToPoint:s2 controlPoint:cp2]; [path closePath]; return path; }
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context{
self.mapRect = mapRect;
CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);
CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0);
CGContextSetLineWidth(context, mapRect.size.height/700);
CGContextSetLineJoin(context, kCGLineJoinRound);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextAddPath(context, [self pathForOverlayForMapRect:mapRect].CGPath);
[self updateTouchablePathForMapRect:mapRect];
CGContextDrawPath(context, kCGPathFillStroke);
}
Это работает просто отлично, но я хотел бы обратить градиент вдоль этого пути, а не только цвет заливки. И здесь это начинает очень сложно.
Я экспериментировал с CGContextDrawLinearGradient(), но он еще нигде не полезен.
Этот ответ прекрасен! Большое спасибо. Я удалил 'CGContextReplacePathWithStrokedPath()', поэтому мой путь был бы заполнен градиентом и не только очерчен этим. – freshking
'CGContextReplacePathWithStrokedPath' полезен, если вы хотите использовать градиент _along_ путь (в соответствии с вопросом), а не _inside_ путь. – neilco
Проблема, с которой я сталкивалась с 'CGContextReplacePathWithStrokedPath', заключалась в том, что градиент применялся только к самому пути, но не заполнял его. Инсульт вместо заполнения. Или у меня что-то не так? – freshking