2014-10-07 95 views
0

我試圖在使用MKOverlayRenderer的地圖上繪製文本。我有一個現有的,功能強大的MKOverlayRenderer呈現一組點,所以我唯一的問題就是爲' - (void)drawMapRect:(MKMapRect)中的每個點渲染一段文本mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)上下文「功能。使用MKOverlayRenderer繪製文本

我通過SO和Google發現的所有解決方案均使用註釋或UILabels。但是我想讓文本繪圖代碼與渲染點的代碼位於同一位置。也有大約10000點,雖然我確保它不是在同一時間通過縮放和邊界檢查來渲染它們。我確信我不想用其他解決方案創建10,000個對象。

這是當前的測試代碼,我必須嘗試渲染「文本文本」項目之一。它是我在網上找到的一些方法的組合,用於呈現某些東西。

CGPoint* point = self.pointList.pointArray + pointIndex; 
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0); 
CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 1.0); 
CGContextSelectFont(context, "Helvetica", 20.f, kCGEncodingFontSpecific); 
CGContextSetTextDrawingMode(context, kCGTextFill); 
CGAffineTransform xform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0); 
CGContextSetTextMatrix(context, xform); 
CGContextShowTextAtPoint(context, point->x, point->y, "Test Text 1", 11); 
CGContextShowTextAtPoint(context, 10, 10, "Test Text 2", 11); 
CGContextShowText(context, "Test Text 4", 11); 
UIFont* font = [UIFont fontWithName:@"Helvetica" size:12.0]; 
[@"Test Text 3" drawAtPoint:*point withFont:font]; 

這是我的第一個SO問題,所以對不起,如果它不是正確的。

編輯:我剛看到放大的文字,只要我可以去,所以意識到我沒有計算縮放比例。假設我需要在渲染之前進行縮放轉換來解決它。目前還沒有解決,但我想我正在路上。

回答

1

我已經解決了。對不起,發佈這個,但我在我的智慧結束,並認爲我需要幫助。

,提煉線爲:

CGContextShowTextAtPoint(context, point->x, point->y, "Test Text 1", 11); 

這是一個過時的功能,但我不知道任何其他方式來呈現到一個特定的背景。

爲了解決這個問題,仿射變換成了:

CGAffineTransform xform = CGAffineTransformMake(1.0/zoomScale, 0.0, 0.0, -1.0/zoomScale, 0.0, 0.0); 

其他錯誤是,「選擇字體」調用所需成爲:

CGContextSelectFont(context, "Helvetica", 12.f, kCGEncodingMacRoman); 

我已經從一些複製的其他編碼我在網上看過的示例代碼,但它導致文本有錯誤的字符。

如果仍然有辦法,我可以不使用已棄用的CGContextShowTextAtPoint函數我仍然很想知道。