Mapkit новые аннотации с пин без всплывающего окна - PullRequest
1 голос
/ 28 января 2012

Я только что создал новое приложение и реализовал карту в виде. Я создал карту с некоторыми личными аннотациями, но, когда пользователь касается булавки, ничего не появляется. Я попытался установить цвет булавки, но ничего не работает. Мне нужно, чтобы пользователь, касаясь булавки, мог коснуться кнопки раскрытия информации во всплывающем окне, чтобы использовать «родные карты». Теперь, когда я касаюсь булавки, эта становится темнее, но больше ничего. Кто-нибудь может мне помочь? Пожалуйста!!

я не знаю, как далеко, а что нет, и как далеко, так и есть! Скорее всего, я не прикалывался, давал задание, но не успевал, Нулла! non riesco nemmeno ad agire su di loro per cambiare colore, immagini, .... о том, как это сделать, учебник ma non trovo l'errore!

заголовок подкласса

 #import <Foundation/Foundation.h>
    #import <MapKit/Mapkit.h>

    @interface myAnnotation : NSObject <MKAnnotation>{

        CLLocationCoordinate2D coordinate;
        NSString *titolo;
        NSString *sottotitolo;
    }

    @property(nonatomic,assign) CLLocationCoordinate2D coordinate;
    @property(nonatomic,copy) NSString *titolo;
    @property(nonatomic,copy) NSString *sottotitolo;


    @end

реализация подкласса

@implementation myAnnotation

    @synthesize titolo;
    @synthesize sottotitolo;
    @synthesize coordinate;

    -init{
        return self;

    }

    @end

файл .m view controller

CLLocation *userLoc = myMapView.userLocation.location;
        CLLocationCoordinate2D userCoordinate = userLoc.coordinate;
        NSLog(@"user latitude = %f",userCoordinate.latitude);
        NSLog(@"user longitude = %f",userCoordinate.longitude);
        myMapView.delegate=self;


        NSMutableArray* annotations=[[NSMutableArray alloc] init];

        CLLocationCoordinate2D theCoordinate1;
        theCoordinate1.latitude = 45.;
        theCoordinate1.longitude = 7.;

        CLLocationCoordinate2D theCoordinate2;
        theCoordinate2.latitude = 45.;
        theCoordinate2.longitude = 12.;

        CLLocationCoordinate2D theCoordinate3;
        theCoordinate3.latitude = 45.;
        theCoordinate3.longitude = 8.;

        CLLocationCoordinate2D theCoordinate4;
        theCoordinate4.latitude = 43.;
        theCoordinate4.longitude = 7.;

        myAnnotation* myAnnotation1=[[myAnnotation alloc] init];

        myAnnotation1.coordinate=theCoordinate1;
        myAnnotation1.titolo=@"xxxx";
        myAnnotation1.sottotitolo=@"xxx";


        myAnnotation* myAnnotation2=[[myAnnotation alloc] init];

        myAnnotation2.coordinate=theCoordinate2;
        myAnnotation2.titolo=@"yyyy";
        myAnnotation2.sottotitolo=@"yyyy";

        myAnnotation* myAnnotation3=[[myAnnotation alloc] init];

        myAnnotation3.coordinate=theCoordinate3;
        myAnnotation3.titolo=@"zzz";
        myAnnotation3.sottotitolo=@"zzz";

        myAnnotation* myAnnotation4=[[myAnnotation alloc] init];

        myAnnotation4.coordinate=theCoordinate4;
        myAnnotation4.titolo=@"kkk";
        myAnnotation4.sottotitolo=@"kkk";


        [myMapView addAnnotation:myAnnotation1];
        [myMapView addAnnotation:myAnnotation2];
        [myMapView addAnnotation:myAnnotation3];
        [myMapView addAnnotation:myAnnotation4];


        [annotations addObject:myAnnotation1];
        [annotations addObject:myAnnotation2];
        [annotations addObject:myAnnotation3];
        [annotations addObject:myAnnotation4];


        NSLog(@"%d",[annotations count]);

, а затем этот фрагмент, чтобы показать и персонализировать пин

-(MKAnnotationView *)mapView:(MKMapView *)mV viewForAnnotation:
(id <MKAnnotation>)annotation {
    MKPinAnnotationView *pinView = nil; 
    if(annotation != mapView.userLocation) 
    {
        static NSString *defaultPinID = @"com.invasivecode.pin";
        pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:defaultPinID];
        if ( pinView == nil ) pinView = [[[MKPinAnnotationView alloc]
                                          initWithAnnotation:annotation reuseIdentifier:defaultPinID] autorelease];

        pinView.pinColor = MKPinAnnotationColorPurple; 
        pinView.canShowCallout = YES;
        pinView.animatesDrop = YES;
    } 
    else {
        [mapView.userLocation setTitle:@"I am here"];
    }
    return pinView;
}

1 Ответ

3 голосов
/ 28 января 2012

Протокол MKAnnotation требует, чтобы класс отвечал на title и subtitle.Свойства должны быть названы в точности так.

Несмотря на то, что вы также можете иметь свои собственные свойства с разными именами для них, представление карты не будет вызывать их (оно ищет title и subtitle).

Для кнопки раскрытия в viewForAnnotation установите rightCalloutAccessoryView на UIButton и ответьте на ее нажатие в методе делегата calloutAccessoryControlTapped.

В этом методе делегатаВы можете получить доступ к объекту аннотации с помощью (myAnnotation *)view.annotation, а затем вызвать openURL, чтобы открыть приложение Карты.

...