2012-04-05 10 views
8

Mam dwie opcje nakładki na mojej mapie: MKCircleOverlay i MKPolygonOverlay. Pierwsza z nich ma zmienny promień, kontrolowany przez UISlider. Ostatni jest dostosowywany w zależności od liczby i położenia rogów.Jeśli zmienię bardzo szybko promień okręgu (zmniejsz wartość UISlider), czasami moje nakładki znikają (okrąg), a potem nie można już narysować wielokąta (oczywiście koło też) .Nie powodując awarii aplikacji. Co to może być?MKOverlay czasem znika

Oto kod używam:

- (IBAction) addCircle:(id)sender 
{ 
slider.hidden = NO; 
slider.transform = CGAffineTransformMakeRotation(M_PI*(-0.5)); 

_longPressRecognizer= [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; 
_longPressRecognizer.minimumPressDuration = 1.0; 

[mapview addGestureRecognizer:_longPressRecognizer]; 
[_longPressRecognizer release]; 
} 

- (void)handleLongPress:(UIGestureRecognizer *)gestureRecognizer 
{ 
if (gestureRecognizer.state != UIGestureRecognizerStateBegan) 
    return; 
CGPoint touchPoint = [gestureRecognizer locationInView:mapview];  
CLLocationCoordinate2D touchMapCoordinate = [mapview convertPoint:touchPoint toCoordinateFromView:mapview]; 

MKPointAnnotation *pa = [[MKPointAnnotation alloc] init]; 
pa.coordinate = touchMapCoordinate; 
pa.title = @"Circle Based Search"; 

[mapview addAnnotation:pa]; 
[pa release]; 

tmC = touchMapCoordinate; 
double radius = 1000.0; 

self.circleOverlay = [MKCircle circleWithCenterCoordinate:tmC radius:radius]; 
[mapview removeOverlays:[mapview overlays]]; 
[mapview addOverlay:circleOverlay]; 
[mapview removeAnnotations:[mapview annotations]]; 
} 


-(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id)overlay 
{ 
if ([overlay isKindOfClass:[MKCircle class]]) 
{ 
    MKCircleView* circleView = [[MKCircleView alloc] initWithOverlay:overlay] ; 
    circleView.fillColor = [UIColor blueColor]; 
    circleView.strokeColor = [UIColor blueColor]; 
    circleView.lineWidth = 5.0; 
    circleView.alpha = 0.20; 
     return circleView; 
} 
else 
    if ([overlay isKindOfClass:[MKPolygon class]]) 
{ 
    MKPolygonView *polygonView = [[MKPolygonView alloc] initWithOverlay:overlay ]; 
    polygonView.fillColor = [UIColor blueColor]; 
    polygonView.strokeColor = [UIColor blueColor]; 
    polygonView.lineWidth = 5.0; 
    polygonView.alpha = 0.20; 
    return polygonView; 
} 
return [kml viewForOverlay:overlay]; 
} 

- (void)addCircleWithRadius:(double)radius 
{ 
self.circleOverlay = [MKCircle circleWithCenterCoordinate:tmC radius:radius]; 
[mapview removeOverlays:[mapview overlays]]; 
[mapview addOverlay:circleOverlay]; 
[mapview removeAnnotations:[mapview annotations]]; 
} 

- (IBAction)sliderChanged:(UISlider *)sender 
{ 
    double radius = (sender.value); 
[self addCircleWithRadius:radius]; 
[mapview removeAnnotations:[mapview annotations]]; 
} 
+0

Pokaż nam kod, którego używasz do zmiany rozmiaru koła. Dopóki nie zobaczymy, że możemy tylko zgadywać, co może się wydarzyć. – sosborn

+0

Po prostu zrobiłem, przepraszam za to, zupełnie zapomniałem dodać kod. – Hari

+0

Powinieneś policzyć promień na swoim suwaku, aby sprawdzić, czy zwraca on to, czego oczekujesz. Zaloguj się również wartość tmc, aby upewnić się, że centrum znajduje się w miejscu, w którym chcesz się zatrzymać. Nie jestem pewien struktury kodu, ale możesz aktywować długotrwały system rozpoznawania, gdy powoli przesuwasz suwak. – sosborn

Odpowiedz

3

Problem solved.It było coś z UISlider w stalówkę, w Inspektorze suwaka pod Values własnością Continuous był checked.After I niezaznaczone, że problem został rozwiązany.