3

3 つのカテゴリの関心のあるポイントを含むマップがあります。現時点では、私はそれらを表示していますが、それらはすべて同じ色です. どのカテゴリに属しているかに応じて色を表示するにはどうすればよいですか?

私は周りを検索しましたが、自分のコードに適用するために理解できるものを見つけることができませんでした。

ピンに注釈を付けるための現在のコードは次のとおりです。

-(void)pins:(NSString *)name lat:(NSString *)lat lon:(NSString *)lon poiID:(NSString *)poiID
{

    //cast string to float
    CGFloat Lat = (CGFloat)[lat floatValue];
    CGFloat Lon = (CGFloat)[lon floatValue];

    //Set coordinates of pin
    CLLocationCoordinate2D coordinate;
    coordinate.latitude = Lat;
    coordinate.longitude = Lon;

    //Create Pin
    MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
    //set details
    [annotation setCoordinate:coordinate];
    [annotation setTitle:name];
    [annotation setAccessibilityLabel:poiID]; //set the label eq to the id so we know which poi page to go to


    // Add pin to map
    [self.showMapView addAnnotation:annotation];
}

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    //create annotation
    MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];
    if (!pinView) {
        pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"];
        pinView.pinColor = MKPinAnnotationColorRed;
        pinView.animatesDrop = FALSE;
        pinView.canShowCallout = YES;

        //details button
        UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        pinView.rightCalloutAccessoryView = rightButton;

    } else {
        pinView.annotation = annotation;
    }
    return pinView;
}

必要な場合に備えて、コードの残りの部分を次に示します。

助けてくれてありがとう。

4

3 に答える 3

5

簡単に実行できます。ifステートメントを追加するだけで、タイトルまたはサブタイトルを確認できます。地図を使用していたとき、アノテーションクラスには、ホテル、空港など、場所が何であるかを示すサブタイトルがありました。ifステートメントを追加して確認し、ピンポイントを設定して色を設定しました。ピンをしたかった

if([annotation.subtitle isEqualToString:@"Hotel"])
    {
        pinView.animatesDrop=YES;
        pinView.pinColor=MKPinAnnotationColorPurple;


    }else if([annotation.subtitle isEqualToString:@"Airport"])
    {
      pinView.animatesDrop=YES;
        pinView.pinColor=MKPinAnnotationColorRed;
    }

または、画像にしたい場合は、

pinView.image = [UIImage imageNamed:@"airportMarker.png"];

編集:更新されたコード

このようなカスタムアノテーションクラスを作成します

@interface MyAnnotation : NSObject<MKAnnotation> 
{

    CLLocationCoordinate2D  coordinate;
    NSString*               title;
    NSString*               subtitle;
    NSInteger categoryID;
}
@property NSInteger categoryID;
@property (nonatomic, assign)   CLLocationCoordinate2D  coordinate;
@property (nonatomic, copy)     NSString*               title;
@property (nonatomic, copy)     NSString*               subtitle;

@end

次に、オブジェクトを画面に追加するときに、それぞれにIDを付けます。

CLLocationCoordinate2D hotelCoordinates1;
hotelCoordinates1.latitude = 35.38355;
hotelCoordinates1.longitude = 1.11004;
MyAnnotation* exampleHotel=[[MyAnnotation alloc] init];
exampleHotel.coordinate=hotelCoordinates1;
exampleHotel.title=@"Example Hotel";
exampleHotel.subtitle=@"Hotel";
exampleHotel.categoryID = 1;

次に、このメソッドの内部

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
    //create annotation

これを行うだけです

if([(MyAnnotation*)annotation categoryID] == 1)
        {

        }

作成したクラスの名前に注釈をキャストする必要があります。以上です。お役に立てば幸いです!!

于 2012-10-30T10:26:28.403 に答える
2
- (MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:(id <MKAnnotation>)annotation {
   static NSString *AnnotationViewID = @"annotationViewID";

    MKAnnotationView *annotationView = (MKAnnotationView *)[MymapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];

    if (annotationView == nil)
    {
        annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID] autorelease];
    }

    if (annotation == MymapView.userLocation)
        return nil;
    /////i give just an example with category 
    if(category == 1){
       annotationView.image = [UIImage imageNamed:@"Category1.png"];
    }
    else if(category == 2){
       annotationView.image = [UIImage imageNamed:@"Category2.png"];
    }

    annotationView.annotation = annotation;
    annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    annotationView.rightCalloutAccessoryView.tag = 101;

    annotationView.canShowCallout = YES;
    return annotationView;
}
于 2012-10-30T10:36:45.077 に答える
1

mkAnnotationクラスをオーバーライドし、カテゴリIDを宣言する特定のフィールドを定義する必要があります。マップ上で注釈を作成するときは、IDを設定し、デリゲートviewForAnnotationで、ID注釈を確認し、現在のIDのピンに使用する必要がある色を確認します。

MKAnnotationクラスをovverideする方法については、この投稿も参照してください:MKAnnotation

于 2012-10-30T10:29:05.533 に答える