2
패턴 이미지로 MKMapView
에 선을 그려 봅니다. 그림은 사용자 정의 MKMapOverlay
보기를 추가하여 수행됩니다.패턴 이미지로 MKMapView에 선을 그립니다.
나는 선을 그릴 수는 있지만, 그림은 전체 이미지 대신에 패턴 이미지의 왼쪽 위 픽셀 만 사용하는 것으로 보인다. 뭐가 잘못
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);
}
}
어떤 생각 : 여기
내 드로잉 루틴?고맙습니다.
지도를 확대하면 어떻게됩니까? – turtle
MKPolyLine은 확대되지 않지만 각 점 사이의 거리가 증가합니다. 당신은이 응용 프로그램에서 실제 동작을 볼 수 있습니다 : https://itunes.apple.com/us/app/city-distance/id561422939?mt=8 – EsbenB
애플 리케이션이 좋아 보인다. 그러나 위에 붙여진 코드에 따르면. 어떻게 든지도를 확대하면'points'의 수는'intEnd' 이상이됩니다. 왜 그런 일이 일어나고 어떻게 처리 할 것인가? CLLocation * loc2 = (CLLocation *) [points objectAtIndex : intEnd]; 충돌이 발생합니다! – turtle