8
マップには、MKCircleOverlayとMKPolygonOverlayという2つのオーバーレイオプションがあります。最初は可変半径で、UISliderで制御されています。最後は角の数と位置によってカスタマイズできます。 (サークル)を消してしまい、その後もポリゴンを描くことはできません(もちろん円です)。アプリケーションがクラッシュすることはありません。何がありますか?ここでMKOverlayが時々消える
は、私が使用するいくつかのコードです:
- (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]];
}
サークルのサイズを変更するために使用しているコードをお知らせください。私たちは、何が起きているのかを推測することができるまで見る。 – sosborn
ちょうどやった、申し訳ありません、私は完全にコードを追加することを忘れました。 – Hari
あなたが期待しているものを返すかどうかを確認するには、sliderChangedで半径をNSLogする必要があります。また、tmcの値を記録して、センターが滞在予定の場所に留まっていることを確認してください。コード構造はわかりませんが、スライダをゆっくり動かすと長時間タッチ認識機能が有効になることがあります。 – sosborn