MKCircleview Рисунки - PullRequest
       1

MKCircleview Рисунки

2 голосов
/ 19 июля 2010

Как нарисовать текст в MKCircleview? Я должен напечатать текст на наложении MKMapview. это возможно?

1 Ответ

1 голос
/ 23 марта 2012

В этом разделе моего подкласса оверлейного вида 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.

Я ударил головой по столу почти месяц, прежде чем обнаружил, почему он так часто падает в случайные моменты времени.

Мой код предназначен для кластеризации, размещения текста в середине каждого круга.с количеством элементов в этом кластере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...