В этом разделе моего подкласса оверлейного вида MKOverlayView:
- (void)drawMapRect:(MKMapRect)mapRect
zoomScale:(MKZoomScale)zoomScale
inContext:(CGContextRef)context
Вы должны сделать / что-то / следующим образом:
CGContextSetTextMatrix(context, CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0));
// Setup text rendering stuff.
CGFloat fontHeight = rect.size.height/2.0f;
CGContextSelectFont(context, "Thonburi", fontHeight, kCGEncodingMacRoman);
CGContextSetRGBFillColor(context, 0, 0, 0, 1);
CGContextSetRGBStrokeColor(context, 0, 0, 0, 1);
// Set string.
const char *text = [[NSString stringWithFormat:@"%d",clusters[i].count] UTF8String];
int len = strlen(text);
// Render text invisible.
CGContextSetTextDrawingMode(context, kCGTextInvisible);
CGContextShowTextAtPoint(context,
0,
0,
text,
strlen(text));
// Get actual point it was renderered.
CGPoint pt = CGContextGetTextPosition(context);
// Set text to visible.
CGContextSetTextDrawingMode(context, kCGTextFillStroke);
// Actually render text.
CGContextShowTextAtPoint(context,
rect.origin.x + (0.5f * rect.size.width) - (0.5f * pt.x), // Origin + half the width - half the width of text == center aligned text?
rect.origin.y + (1.25f * fontHeight), // Hack. 1 1/4 font height (which is half rect height) == center vert. aligned text.
text,
len);
Это будет отображатьтекст центрирован по центру круга.
Несколько предупреждений о приведенном выше коде ... на самом деле он взят из подкласса MKOverlayPathView, внутри которого я рисую много кругов в представлении наложения в разных местах и, таким образом, требуется довольно динамичный метод рисования текста вправильное место.Таким образом, код, вероятно, не станет для вас каплей решения и будет немного сложнее, чем вам действительно нужно.Однако это должно указывать вам правильное направление.
Пожалуйста, имейте в виду, что наличие более чем двух оверлейных представлений на карте - это путь к безумию со случайными сбоями и трассировкой стека, поскольку слои потребляют все больше и большебаран.Таким образом, если у вас есть несколько небольших оверлеев, я бы порекомендовал вам пойти по маршруту MKOverlayPathView.
Я ударил головой по столу почти месяц, прежде чем обнаружил, почему он так часто падает в случайные моменты времени.
Мой код предназначен для кластеризации, размещения текста в середине каждого круга.с количеством элементов в этом кластере.