3

MKPolylinesに複数をロードoverlaysしていMKMapViewます。色や線幅などをどうやって変えればいいのか、区別できるようにしたいと思います。

しかし、viewForOverlay:呼び出されると、すべてMKPolylines同じものが表示されるため、それらを変更することはできません。

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {

    if ([overlay isKindOfClass:[MKPolyline class]]) {
        MKPolylineView *aView = [[[MKPolylineView alloc] initWithPolyline:(MKPolyline*)overlay] autorelease];
        aView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7];
        MKZoomScale currentZoomScale = (CGFloat)(mapView.bounds.size.width / mapView.visibleMapRect.size.width);
        aView.lineWidth = MKRoadWidthAtZoomScale(currentZoomScale);

        return aView;
    }

    // Want to color my next overlay red

    return  nil;
}

これどうやってするの?どういうわけかそれぞれにタグを付けてもMKPolylineいいですか?または、これを行うための別のより良い方法はありますか?

4

3 に答える 3

8

MKPolyline継承元には、それらを区別するために使用できるMKShape設定可能なtitle(および)プロパティがあります。subtitle

この回答には、オブジェクトでの使用方法の例がありMKPolygonます。

要件に対して十分でない場合はtitle、 Mundiがコメントしたようにサブクラス化できます。subtitle

于 2011-11-17T21:12:27.673 に答える
0

MKPolyLine のサブクラスですUIView。したがって、私はタグを使用します。これにより、必要なときに行を参照するのも非常に簡単になります(with viewWithTagをサブクラス化して、タグのような識別子を追加できます。

于 2011-11-17T20:56:39.377 に答える
0

例としてmkcircleを使用しています

  MKCircle *circle = [MKCircle circleWithCenterCoordinate:currentPoint radius:radius];
    [circle setTitle:@"circle1"];
    [map addOverlay:circle];


- (MKOverlayView *)mapView:(MKMapView *)map viewForOverlay:(id <MKOverlay>)overlay
{
    NSLog(@"overlay %@",overlay);

    if ([[overlay title] isEqualToString:@"circle1"]){

    circleView = [[MKCircleView alloc] initWithOverlay:overlay];
    //circleView.strokeColor = [UIColor redColor];
    circleView.fillColor = [[UIColor redColor] colorWithAlphaComponent:0.3];

    return circleView;
    }

}
于 2013-09-09T06:08:17.403 に答える