6

私の MKMap ビューでは、注釈ピンを画像でカスタマイズしました。しかし、まだいくつかのピンは静的で、指定された画像を表示していません。

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotationを使用 してピン画像を設定しています。

ここにコードと画面を追加します。

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


if ([annotation isKindOfClass:[MKUserLocation class]])
    return nil;

static NSString* AnnotationIdentifier = @"AnnotationIdentifier";
MKPinAnnotationView* pinView = [[MKPinAnnotationView alloc]
                                 initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier];
pinView.animatesDrop=YES;
pinView.canShowCallout=YES;
    pinView.pinColor= MKPinAnnotationColorGreen;

    pinView.enabled = YES;
    pinView.canShowCallout = YES;
    pinView.image=[UIImage imageNamed:@"bublerest.png"]; //here I am giving the image  





UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton setTitle:annotation.title forState:UIControlStateNormal];
[rightButton addTarget:self
                action:@selector(showDetails:)
      forControlEvents:UIControlEventTouchUpInside];

    pinView.rightCalloutAccessoryView = rightButton;

UIImageView *profileIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"rest_image2.png"]];
pinView.leftCalloutAccessoryView = profileIconView;


return pinView;
}

ここに画像の説明を入力

何か案は?

4

4 に答える 4

12

MKAnnotationViewリンゴの「ピン」とは異なる画像が必要な場合は、 のMKAnnotationView代わりにを使用する必要がありMKPinAnnotationViewます。

MKPinAnnotationView は、このようにカスタマイズすることを意図しておらず、時々ピンを表示し続けます。Class Referenceは、pinColorとのみanimatesDropが変更されることになっていることを示しています。

ただし、PinAnnotationView のアニメーションと影は失われます。

于 2013-02-21T10:15:12.210 に答える
2

MKAnnotationピンを設定するために使用されるプロトコルでプロパティを作成します。

@interface AddressAnnotation1 : NSObject<MKAnnotation> {
}
@property (nonatomic, retain) NSString *mPinColor;

.m ファイル実装ファイル内

- (NSString *)pincolor{
    return mPinColor;
}

- (void) setpincolor:(NSString*) String1{
    mPinColor = String1;
}

を追加するときは、色もannotation設定します。pin

#pragma mark annotation delegate
- (MKAnnotationView *) mapView:(MKMapView *)mapView1 viewForAnnotation:(AddressAnnotation1 *) annotation
{
    UIImage *anImage = nil;

    MKAnnotationView *annView=(MKAnnotationView*)[mapView1 dequeueReusableAnnotationViewWithIdentifier:@"annotation"];
    if(annView==nil){
        annView=[[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"annotation"] autorelease];
    }
    if([annotation.mPinColor isEqualToString:@"green"])
    {
        anImage=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Google map pin 02.png" ofType:nil]];
    }
    else if([annotation.mPinColor isEqualToString:@"red"])
    {
        anImage=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Google map pin 01.png" ofType:nil]];
    }
    else if([annotation.mPinColor isEqualToString:@"blue"])
    {
        anImage=[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Google map pin 02.png" ofType:nil]];
    }
    annView.image = anImage;
return annView;
}

ピンのカスタム イメージが必要ない場合は、条件ステートメントの本文を次のように置き換えます。

annView.pinColor = MKPinAnnotationColorGreen;

また

annView.pinColor = MKPinAnnotationColorRed;

また

annView.pinColor = MKPinAnnotationColorPurple;

私はこれを以前に実装しました。だからそれを試してみてください。

于 2013-02-21T12:29:26.587 に答える
1

これをviewForAnnotation

if ([annotation isKindOfClass:[MyAnnotation class]]) {
    // try to dequeue an existing pin view first
    static NSString* myAnnotationIdentifier = @"MyAnnotationIdentifier";

    // If an existing pin view was not available, create one
    MKPinAnnotationView* customPinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:myAnnotationIdentifier];

    if ([(MyAnnotation *)annotation ann] == AnnotationTypeStart) {
        NSLog(@"In Start");
        customPinView.enabled = NO;
        customPinView.image = [UIImage imageNamed:@"begin.png"];
    }
}

whereMyAnnotationは以下のように実装されています

typedef enum AnnotationType {
    AnnotationTypeStart,
    AnnotationTypeEnd,
    AnnotationTypeWayPoint,
} AnnotationType;

@interface MyAnnotation : NSObject <MKAnnotation> {
    CLLocationCoordinate2D coordinate;
    NSString *title;
    NSString *subtitle;
    AnnotationType ann;
}
于 2013-02-21T11:47:45.127 に答える
1

最近のプロジェクトで使用したサンプル スニペットを投稿します。お役に立てれば。

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

Annotation *annotationInst = (Annotation*)annotation;

MKAnnotationView *pinView = nil;
if(annotation != mapView.userLocation)
{
    static NSString *defaultPinID = @"pinId";
    pinView = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];

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


    pinView.canShowCallout = YES;
    pinView.image = [UIImage imageNamed:LOCATION_BUBBLE];

    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
    pinView.rightCalloutAccessoryView = rightButton;
}    
return pinView;    
}
于 2013-02-21T10:30:10.497 に答える