Ho due opzioni di sovrapposizione nella mia mappa: un MKCircleOverlay e un MKPolygonOverlay. Il primo è con raggio variabile, controllato tramite un UISlider. L'ultimo è personalizzabile in base al numero e alla posizione degli angoli. Se cambio molto veloce il raggio del cerchio (riduci il valore di UISlider) a volte la mia sovrapposizione scompare (il cerchio) e dopo di che il poligono non può più essere disegnato (ovviamente anche il cerchio). Nessun crash dell'applicazione. Che cosa potrebbe essere?MKOverlay a volte scompare
Ecco il codice che uso:
- (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]];
}
Mostraci il codice che stai utilizzando per ridimensionare il cerchio. Finché non vediamo che possiamo solo indovinare su cosa potrebbe accadere. – sosborn
Appena fatto, mi dispiace per quello, ho completamente dimenticato di aggiungere il codice. – Hari
Dovresti NSLog il raggio nel tuo sliderChanged per vedere se restituisce ciò che ti aspetti. Registrare anche il valore tmc per assicurarsi che il centro rimanga dove ci si aspetta che rimanga. Non sei sicuro della struttura del codice, ma potresti attivare il riconoscimento touch lungo quando muovi lentamente il cursore. – sosborn