没有弹出窗口的Mapkit新注释

时间:2012-01-28 11:52:49

标签: ios mapkit storyboard

我刚创建了一个新的应用程序,并且我在视图中实现了一个地图。 我创建了带有一些个人注释的地图,但是当用户触摸引脚时,没有出现任何内容。我试图设置引脚的颜色,但似乎没有任何工作。我需要用户在触摸引脚时可以触摸弹出窗口上的显示按钮,以使用“原生地图”。 现在,当我触摸别针时,这个变得更暗,但没有别的。 有人能帮我吗?请!!

io ne avrei bisogno,per per aprire poi un disclosure e far aprire l'app nativa mappe per creare il percorso !! Se ora tocco il pin,questodiveapipiùscuroma non succede nulla! non riesco nemmeno ad agire su di loro per cambiare colore,immagini,.... ho guardato i tutorial 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查看控制器

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 个答案:

答案 0 :(得分:3)

MKAnnotation协议要求该类响应titlesubtitle。属性必须完全相同。

虽然您也可以拥有自己的不同命名属性,但地图视图不会调用它们(它正在寻找titlesubtitle)。

对于公开按钮,在viewForAnnotation中,将rightCalloutAccessoryView设置为UIButton,并在calloutAccessoryControlTapped委托方法中回复其中。

在该委托方法中,您可以使用(myAnnotation *)view.annotation访问注释对象,然后调用openURL打开地图应用。