Objective c iphone-你能将手机创建的图像添加到MKOverlay中吗?
我一直在关注WWDC Sesion 127-使用覆盖自定义地图。他们说,你可以从应用软件包或网络上获取图像作为MKOverlay使用。我想知道,如果图像可以生成的手机使用它的API 有人做过吗?你能提供一个教程吗 谢谢 [编辑] 我还需要一个关于如何将由手机创建或从网络下载的图像添加到地图的教程。Objective c iphone-你能将手机创建的图像添加到MKOverlay中吗?,objective-c,mkoverlay,Objective C,Mkoverlay,我一直在关注WWDC Sesion 127-使用覆盖自定义地图。他们说,你可以从应用软件包或网络上获取图像作为MKOverlay使用。我想知道,如果图像可以生成的手机使用它的API 有人做过吗?你能提供一个教程吗 谢谢 [编辑] 我还需要一个关于如何将由手机创建或从网络下载的图像添加到地图的教程。 我所看到的只是WWDC演示,但你需要参加会议的入场券,而我显然没有。以下是一些使用石英绘制UIImage的代码。希望这对你有帮助,你也能明白 void mainFunction() { //
我所看到的只是WWDC演示,但你需要参加会议的入场券,而我显然没有。以下是一些使用石英绘制UIImage的代码。希望这对你有帮助,你也能明白
void mainFunction() {
// background size
CGSize sizeBack = CGSizeMake(layerFrame.size.width*scaledFactor,layerFrame.size.height*scaledFactor);
UIGraphicsBeginImageContext(sizeBack);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(context, 0., 0., 0., 1.);
drawBorder(context, scaledRect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (destinationLayer) {
[destinationLayer setContents:(id)img.CGImage];
}
}
CGPathRef createRoundedRectanglePath(CGRect mainRect, CGFloat roundRatio) {
roundRatio = fabs(roundRatio);
roundRatio = MIN(1, roundRatio);
CGFloat offset = roundRatio * MIN(mainRect.size.width, mainRect.size.height)/2;
CGPoint c1 = CGPointMake(0,0);
CGPoint c2 = CGPointMake(mainRect.size.width,0);
CGPoint c3 = CGPointMake(mainRect.size.width,mainRect.size.height);
CGPoint c4 = CGPointMake(0,mainRect.size.height);
CGPoint pA = CGPointMake(c1.x + offset, c1.y);
CGPoint pB = CGPointMake(c2.x - offset, c2.y);
CGPoint pC = CGPointMake(c2.x, c2.y + offset);
CGPoint pD = CGPointMake(c3.x, c3.y - offset);
CGPoint pE = CGPointMake(c3.x - offset, c3.y);
CGPoint pF = CGPointMake(c4.x + offset, c4.y);
CGPoint pG = CGPointMake(c4.x, c4.y - offset);
CGPoint pH = CGPointMake(c1.x, c1.y + offset);
CGMutablePathRef result = CGPathCreateMutable();
CGPathMoveToPoint(result, NULL, pA.x, pA.y);
CGPathAddLineToPoint(result, NULL, pB.x, pB.y);
CGPathAddQuadCurveToPoint(result, NULL, c2.x, c2.y, pC.x, pC.y);
CGPathAddLineToPoint(result, NULL, pD.x, pD.y);
CGPathAddQuadCurveToPoint(result, NULL, c3.x, c3.y, pE.x, pE.y);
CGPathAddLineToPoint(result, NULL, pF.x, pF.y);
CGPathAddQuadCurveToPoint(result, NULL, c4.x, c4.y, pG.x, pG.y);
CGPathAddLineToPoint(result, NULL, pH.x, pH.y);
CGPathAddQuadCurveToPoint(result, NULL, c1.x, c1.y, pA.x, pA.y);
CGPathCloseSubpath(result);
CGPathRef path = CGPathCreateCopy(result);
CGPathRelease(result);
return path;
}
void drawBorder(CGContextRef context, CGRect rect) {
CGContextSaveGState(context);
/* Outside Path */
CGPathRef thePath = createRoundedRectanglePath(rect, 0.2);
/* Fill with Gradient Color */
CGFloat locations[] = { 0.0, 1.0 };
CGColorRef startColor = [UIColor colorWithRed:1.
green:1.
blue:1.
alpha:1.].CGColor;
CGColorRef endColor = [UIColor colorWithRed:208./255.
green:208./255.
blue:208./255.
alpha:1.].CGColor;
NSArray *colors = [NSArray arrayWithObjects:(id)startColor, (id)endColor, nil];
CGPoint startPoint = CGPointMake(CGRectGetMidX(rect), 0);
CGPoint endPoint = CGPointMake(CGRectGetMidX(rect), rect.size.height);
CGContextAddPath(context, thePath);
CGContextClip(context);
drawLinearGradient(context, startPoint, endPoint, locations, (CFArrayRef*)colors);
/* Stroke path */
CGPathRelease(thePath);
thePath = createRoundedRectanglePath(rect, 0.2);
CGContextSetStrokeColor(context, CGColorGetComponents([UIColor colorWithRed:0 green:0 blue:1. alpha:1.].CGColor));
CGContextAddPath(context, thePath);
CGContextSetLineWidth(context, 1.);
CGContextDrawPath(context, kCGPathStroke);
CGContextRestoreGState(context);
CGPathRelease(thePath);
}
你所说的“如果手机可以使用其API生成图像”是什么意思?你形象的来源是什么?文件(.jpg、.png等)或NSData?谢谢,但我还想知道的是,如果我使用Quartz制作该图像,我是否能够将其作为MKOVERAY添加到地图中?是的,这是可能的,您需要将MKOVERAYVIEW子类化,然后覆盖此方法“drawMapRect:zoomScale:inContext:”。在这种方法中,您可以使用石英直接绘制内容。所以你甚至不需要制作UIImage!你知道我可以做这件事的教程吗?我对MKOverlays和石英相当陌生,所以对我来说这就像是巫术……看,我发现有人在做这件事:)