2012-05-22 13 views
5

Próbuję narysować linię prostą między dwoma punktami w widoku nakładki. W metodzie MKOverlayView, myślę, że robię poprawnie, ale nie rozumiem, dlaczego nie rysuje żadnych linii ...linie nie są rysowane na widoku nakładki

Czy ktoś wie, dlaczego?

- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale 
      inContext:(CGContextRef)context 
{ 
    UIGraphicsPushContext(context); 

    MKMapRect theMapRect = [[self overlay] boundingMapRect]; 
    CGRect theRect = [self rectForMapRect:theMapRect]; 

    // Clip the context to the bounding rectangle. 
    CGContextAddRect(context, theRect); 
    CGContextClip(context); 

    CGPoint startP = {theMapRect.origin.x, theMapRect.origin.y}; 
    CGPoint endP = {theMapRect.origin.x + theMapRect.size.width, 
     theMapRect.origin.y + theMapRect.size.height}; 

    CGContextSetLineWidth(context, 3.0); 
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor); 

    CGContextBeginPath(context); 
    CGContextMoveToPoint(context, startP.x, startP.y); 
    CGContextAddLineToPoint(context, endP.x, endP.y); 
    CGContextStrokePath(context); 

    UIGraphicsPopContext(); 
} 

Dziękuję za pomoc.

Odpowiedz

3

Linia jest narysowany startP i endP które są CGPoint wartości, ale są inicjowane przy użyciu theMapRect zawierający MKMapPoint wartości.

Zamiast tego zainicjuj je za pomocą theRect, którą konwertujesz z theMapRect, używając rectForMapRect.

Również w przypadku szerokości linii można przeskalować ją za pomocą funkcji MKRoadWidthAtZoomScale. W przeciwnym razie stała szerokość linii 3.0 nie będzie widoczna, chyba że jesteś bardzo blisko powiększony.

Zmieniony kod będzie wyglądać następująco:

CGPoint startP = {theRect.origin.x, theRect.origin.y}; 
CGPoint endP = {theRect.origin.x + theRect.size.width, 
    theRect.origin.y + theRect.size.height}; 

CGContextSetLineWidth(context, 3.0 * MKRoadWidthAtZoomScale(zoomScale)); 


Wreszcie, zamiast zwyczaju MKOverlayView, dlaczego nie użyć MKPolylineView aby uniknąć rysowania linii ręcznie?

+0

Zadziałało !! Dziękuję Ci bardzo!!! –

+0

Witam, mam jeszcze jedno pytanie ... Jeśli mam zainicjować CGPoint z boundingMapRect, jak mam to zrobić? –

+0

oh .. i powód, dla którego nie używam MkPolylineView, muszę narysować strzałkę nie tylko linię prostą ... –