0

私はこれを両方試しました(MKMapView Delegate):

-(void) mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
    for (MKAnnotationView *annotationView in views)
    {
        annotationView.image = [UIImage imageNamed:@"itemType2.png"];
        annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        annotationView.canShowCallout = YES;
    }        
}

そしてこれ(MKMapViewを持つVC上):

[self.theMapView addAnnotations:annotationsArray];

for (id <MKAnnotation> itemAnnotation in self.theMapView.annotations)
{        
    MKAnnotationView *itemAnnotationView = [self.theMapView viewForAnnotation:itemAnnotation];

    itemAnnotationView.image = [UIImage imageNamed:@"itemType2.png"];
    itemAnnotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    itemAnnotationView.canShowCallout = YES;

    //[self.theMapView setNeedsDisplay];
}

MKAnnotationView の外観の変更に成功することなく、それらは開示ボタンなどのない単純な赤いピンとして表示されます....

サブクラス化された MKMapView を作成し、 - (MKAnnotationView *)viewForAnnotation:(id < MKAnnotation >)annotation を使用してそれらを変更する唯一の方法ですか??? 注釈を変更するためだけに追加のサブクラスを作成する必要があると思いますが、上記のメソッドが機能しないのはなぜですか?

4

1 に答える 1

3

でこれらのプロパティを設定するために何かをサブクラス化する必要はありませんMKAnnotationView

viewForAnnotation デリゲートメソッドを実装し、そこでプロパティを設定する必要があります。

コード例については、この回答を参照してください。

その例からの唯一の変更点は、MKAnnotationView代わりに を使用することですMKPinAnnotationView

于 2011-07-03T18:53:01.923 に答える