1

座標の配列でマップビューを表示しようとしています。したがって、緯度と経度が含まれている配列から緯度と経度をロードします。完璧に見せています。今、私は特定の緯度と経度を異なる色のピンで表示したいと考えています。私はこの答えを参照しましたが、それほど違いはありません。

ViewController.m


-(void)showMap:
{
...
...
DataProvider *d = [DataProvider getInstance];
NSInteger numb = sender.view.tag;
d.colorlatitude = [[arraxy objectAtIndex:numb] objectForKey:@"lat"];
d.colorlongitude = [[arraxy objectAtIndex:numb] objectForKey:@"lng"];
[d._address removeAllObjects];
[arraxy removeObjectAtIndex:sender.view.tag];
d._address = arraxy;

MapViewController *map = [[MapViewController alloc]initWithNibName:@"MapViewController" bundle:nil];
[self.navigationController pushViewController:map animated:YES];

}

MapViewController.m


-(void)viewWillAppear:(BOOL)animated
{
DataProvider *d = [DataProvider getInstance];
[_mapView removeAnnotations:_mapView.annotations];

RegisterViewController *appDelegate = [[RegisterViewController alloc]init];

[_mapView setShowsUserLocation:YES];
[_mapView setRegion:MKCoordinateRegionMakeWithDistance([appDelegate.locationManager location].coordinate, 1000, 1000)];
[_mapView setUserTrackingMode:MKUserTrackingModeNone];

MKCoordinateRegion rregion = {{0.0,0.0},{0.0,0.0}};
rregion.center.latitude = [d.colorlatitude floatValue];
rregion.center.longitude = [d.colorlongitude floatValue];
rregion.span.latitudeDelta=0.001f;
rregion.span.longitudeDelta=0.001f;
[_mapView setRegion:rregion];

MapviewAnnotations *add = [[MapviewAnnotations alloc]init];
add.coordinate = rregion.center;
[_mapView addAnnotation:add];


if (d._address)
{
    for (int i=0; i<[d._address count]; i++)
    {
        NSDictionary *dic=[d._address objectAtIndex:i];
        MKCoordinateRegion region={{0.0,0.0},{0.0,0.0}};
        region.center.latitude=[[dic objectForKey:@"lat"]floatValue];
        region.center.longitude=[[dic objectForKey:@"lng"]floatValue];
        region.span.latitudeDelta=0.001f;
        region.span.longitudeDelta=0.001f;
        [_mapView setRegion:region];

        MapviewAnnotations *ann=[[MapviewAnnotations alloc]init];
        ann.coordinate=region.center;
        [_mapView addAnnotation:ann];
    }
}
[super viewWillAppear:YES];
}

MKMapViewのデリゲートメソッドは

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id  <MKAnnotation>)annotation
{
if (![annotation isKindOfClass:[MapviewAnnotations class]])
{
    return nil;
}

static NSString *reuseId = @"currentloc";

MKPinAnnotationView *annView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseId];
if (annView == nil)
{
    annView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:reuseId];
    annView.animatesDrop = NO;
    annView.canShowCallout = YES;
    annView.calloutOffset = CGPointMake(-5, 5);
}
else
{
    annView.annotation = annotation;
}

DataProvider *mvAnn = [DataProvider getInstance];
if (mvAnn.colorlatitude) // here i'm checking the condition.
{
    annView.pinColor = MKPinAnnotationColorGreen;
}
else
{
    annView.pinColor = MKPinAnnotationColorRed;
}

return annView;
}

座標が存在する場合、その特定の座標のみに緑色のピンをプロットする必要がある場合に条件を書いているだけです。これを達成する方法は?

4

2 に答える 2

1

あなたのコードと、Hinata が紹介したコードとの違いは、他のコードの if ステートメントは、yesno現在描画している注釈の値 ( ) を使用して、使用する色を決定することです。値を取得していますDataProviderが、どのアノテーションを描画しているかは伝えていません。そのためinstance、マップがピンを要求しているときにメソッドが返すように感じられるインスタンスが返されます。何を描画するかを決定するには、何を描いているかを伝える必要がありますcolorlatitude

于 2013-03-14T00:03:49.743 に答える
0

以下のようないくつかのフラグを使用してこれを行いました- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation

MapviewAnnotations *mvAnn = (MapviewAnnotations *)annotation;
if (mvAnn.flag == 1)
{
    annView.pinColor = MKPinAnnotationColorGreen;
}
else if (mvAnn.flag == 10)
{
    annView.pinColor = MKPinAnnotationColorPurple;
}
else
{
    annView.pinColor = MKPinAnnotationColorRed;
}

私のviewWillAppearでは、座標を受け取り、フラグDataProviderを付けて個別MapviewAnnotationsに割り当て、3種類のピンで簡単に区別します。

乾杯!

于 2013-03-20T07:30:22.270 に答える