Domanda

Sto cercando di trarre alcune sovrapposizioni cerchio contenente testo su MKMapView. Ho sottoclasse il MKCircleView, in cui ho messo il seguente (in base alla questo ), ma il testo non viene visualizzato. I cerchi visualizzati correttamente. (Inoltre provato soluzione della prima risposta, lo stesso risultato).

-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context {
   [super drawMapRect:mapRect zoomScale:zoomScale inContext:context];
   NSString * t= @"XXXXX\nXXXX" ;
   UIGraphicsPushContext(context);
   CGContextSaveGState(context); 
   [[UIColor redColor] set];
   CGRect overallCGRect = [self rectForMapRect:[self.overlay boundingMapRect]];
   NSLog(@"MKC :  %lf, %lf ----> %lf , %lf ", mapRect.origin.x ,mapRect.origin.y , overallCGRect.origin.x, overallCGRect.origin.y);
   [t drawInRect:overallCGRect withFont:[UIFont fontWithName:@"Arial" size:10.0] lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter];
   CGContextRestoreGState(context);
   UIGraphicsPopContext();
}

Quando il debug, ottengo valori come questi

MKC :  43253760.000000, 104071168.000000 ----> 1.776503 , 1.999245 
MKC :  43253760.000000, 104071168.000000 ----> -1.562442 , -2.043090

Sono normale? Che cosa mi manca?

Grazie.

È stato utile?

Soluzione

Credo che il codice è di lavoro e il problema è che il testo non viene ridimensionato correttamente che lo rende invisibile.

in scala la dimensione del carattere in base alla zoomScale utilizzando la funzione MKRoadWidthAtZoomScale:

[t drawInRect:overallCGRect withFont:[UIFont fontWithName:@"Arial" 
    size:(10.0 * MKRoadWidthAtZoomScale(zoomScale))] 
    lineBreakMode:UILineBreakModeClip alignment:UITextAlignmentCenter];

Anche essere sicuri di utilizzare un colore di testo che è diverso dal colore del cerchio sottostante.

Si noti che usare drawInRect comporterà il testo che viene limitato a all'interno del cerchio e può ottenere troncato. Se si desidera visualizzare sempre tutto il testo, è possibile utilizzare invece drawAtPoint.

Altri suggerimenti

Combinando le risposte qui e aggiornamento per iOS7:

-(void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
{
    [super drawMapRect:mapRect zoomScale:zoomScale inContext:context];

    UIGraphicsPushContext(context);
    CGContextSaveGState(context);
    [[UIColor blueColor] set];

    NSDictionary *fontAttributes = @{NSFontAttributeName:[UIFont systemFontOfSize:10.0f * MKRoadWidthAtZoomScale(zoomScale)]};
    CGSize size = [[[self overlay] title] sizeWithAttributes:fontAttributes];
    CGFloat height = ceilf(size.height);
    CGFloat width  = ceilf(size.width);

    CGRect circleRect = [self rectForMapRect:[self.overlay boundingMapRect]];
    CGPoint center = CGPointMake(circleRect.origin.x + circleRect.size.width /2, circleRect.origin.y + circleRect.size.height /2);
    CGPoint textstart = CGPointMake(center.x - width/2, center.y - height /2 );

    [[[self overlay] title] drawAtPoint:textstart withAttributes:fontAttributes];

    CGContextRestoreGState(context);
    UIGraphicsPopContext();
}

E 'molto probabile che il testo viene disegnato un rettangolo, che non è visibile.

La prima cosa che vorrei fare è provare a stampare i valori in% f anziché% lf, come quei valori sguardo folle. Si dovrebbe anche stampare il .size.width e .size.height per i due rettangoli (mapRect e overallCGRect).

Se questo non vi portano ad una definizione di rettangolo sensibile, quindi provare la definizione di un CGRect te stesso come CGRectMake(0,0,100,20) e vedere se il testo disegna.

Si può anche provare semplicemente disegnando un rettangolo pieno allo stesso overallCGRect che si sta disegnando il testo in.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top