J'ai juste un problème avec mon MKPolyLineView. J'essaie simplement de faire un dégradé de couleur à la Polyline, mais avec CAGradient, ça marche. Je sous-class MKPolylineView et redessine dans
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context UIColor *darker = [UIColor blackColor]; CGFloat baseWidth = self.lineWidth / zoomScale; // draw the dark colour thicker CGContextAddPath(context, self.path); CGContextSetStrokeColorWithColor(context, darker.CGColor); CGContextSetLineWidth(context, baseWidth * 1.5); CGContextSetLineCap(context, self.lineCap); CGContextStrokePath(context); // now draw the stroke color with the regular width CGContextAddPath(context, self.path); CGContextSetStrokeColorWithColor(context, self.strokeColor.CGColor); CGContextSetLineWidth(context, baseWidth); CGContextSetLineCap(context, self.lineCap); CGContextStrokePath(context); [super drawMapRect:mapRect zoomScale:zoomScale inContext:context]; }
mais même cela ne fonctionne pas (StrokeColor = rouge). Des idées pour get un dégradé dans la polyligne? (Highcolor, centercolor, lowcolor)
Merci tout le monde.
Pour peindre un MKPolyline
avec un dégradé, vous pouvez utiliser une sous-class personnalisée de MKPolylineView
. Comme CoreGraphics ne supporte pas caresser un path avec un dégradé, nous devons
CGPathCreateCopyByStrokingPath
CGContextDrawLinearGradient
Voici une sous-class pour vous aider à démarrer:
@interface TWOGradientPolylineView : MKPolylineView @end @implementation TWOGradientPolylineView - (void)strokePath:(CGPathRef)path inContext:(CGContextRef)context { CGFloat lineWidth = CGContextConvertSizeToUserSpace(context, (CGSize){self.lineWidth, self.lineWidth}).width; CGPathRef pathToFill = CGPathCreateCopyByStrokingPath(path, NULL, lineWidth, self.lineCap, self.lineJoin, self.miterLimit); CGRect rect = CGPathGetBoundingBox(pathToFill); CGContextAddPath(context, pathToFill); CGPathRelease(pathToFill); CGContextClip(context); CGFloat gradientLocations[2] = {0.0f, 1.0f}; CGFloat gradientColors[8] = {1.0f, 0.0f, 0.0f, 0.75f, 1.0f, 1.0f, 0.0f, 0.75f}; CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, gradientColors, gradientLocations, 2); CGColorSpaceRelease(colorSpace); CGPoint gradientStart = rect.origin; CGPoint gradientEnd = {CGRectGetMaxX(rect), CGRectGetMaxY(rect)}; CGContextDrawLinearGradient(context, gradient, gradientStart, gradientEnd, kCGGradientDrawsAfterEndLocation); CGGradientRelease(gradient); } @end
Voici une capture d'écran d'un path tracé avec la class ci-dessus: