Я пытаюсь нарисовать линию на MKMapView
с рисунком. Рисунок сделан путем добавления пользовательского вида MKMapOverlay
.рисовать линию на MKMapView с рисунком image
Я могу получить черту, но кажется, что рисунок выполняется с использованием только левого, верхнего пикселя изображения шаблона, а не всего изображения.
Вот мой рисунок рутина:
void drawPatternCellCallback(void *info, CGContextRef cgContext)
{
UIImage *patternImage = [UIImage imageNamed:@"tmpLine"];
CGContextDrawImage(cgContext, CGRectMake(0, 0, patternImage.size.width, patternImage.size.height), patternImage.CGImage);
}
- (void)drawMapRect:(MKMapRect)mapRect
zoomScale:(MKZoomScale)zoomScale
inContext:(CGContextRef)context
{
float alpha = 1;
float tileW = 6.0f;
float tileH = 4.0f;
CGFloat lineWidth = MKRoadWidthAtZoomScale(zoomScale)*2;
CGMutablePathRef path = CGPathCreateMutable();
if (path != nil)
{
//setup styles
CGContextSetRGBStrokeColor(context, 0.0f, 0.0f, 1.0f, 0.5f);
const CGPatternCallbacks kPatternCallbacks = {0, drawPatternCellCallback, NULL};
CGPatternRef strokePattern = CGPatternCreate(
NULL,
CGRectMake(0, 0, tileW, tileH),
CGAffineTransformIdentity,
tileW, // horizontal spacing
tileH,// vertical spacing
kCGPatternTilingConstantSpacing,
true,
&kPatternCallbacks);
//color sapce
CGColorSpaceRef patternSpace = CGColorSpaceCreatePattern(NULL);
CGContextSetStrokeColorSpace(context, patternSpace);
//pattern
CGContextSetStrokePattern(context, strokePattern, &alpha);
//joins/ends
CGContextSetLineJoin(context, kCGLineJoinMiter);
CGContextSetLineCap(context, kCGLineCapButt);
CGContextSetLineWidth(context, lineWidth);
//OK, let's draw it
CGPoint firstCGPoint = [self pointForMapPoint:self.point1];
CGPoint lastCGPoint = [self pointForMapPoint:self.point2];
CGPathMoveToPoint(path, NULL, lastCGPoint.x, lastCGPoint.y);
CGPathAddLineToPoint(path, NULL, firstCGPoint.x, firstCGPoint.y);
CGContextAddPath(context, path);
CGContextStrokePath(context);
//house hold
CGPathRelease(path);
CGPatternRelease(strokePattern);
CGColorSpaceRelease(patternSpace);
}
}
Любая идея, что это не так?
Thanx!
Что происходит, когда вы увеличиваете масштаб карты! – turtle
MKPolyLine не масштабируется, но расстояние между каждой точкой увеличивается. Вы можете увидеть это в действии в этом приложении: https://itunes.apple.com/us/app/city-distance/id561422939?mt=8 – EsbenB
App выглядит хорошо. Но в соответствии с приведенным выше кодом. Так или иначе, подсчет «точек» становится больше, чем «intEnd», когда вы приближаете карту. Почему это происходит, и как вы справитесь с этим. CLLocation * loc2 = (CLLocation *) [указывает объектAtIndex: intEnd]; вызывает крах! – turtle