首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >地图中的随机MKPointAnnotation

地图中的随机MKPointAnnotation
EN

Stack Overflow用户
提问于 2013-12-31 14:39:24
回答 1查看 1.1K关注 0票数 0

在我的项目中,我用这些信息填充我的地图。

代码语言:javascript
复制
for  (int i = 0; i<arrayResults.count; i++){

        object = [arrayResults objectAtIndex:i];

        if ([[object iden]intValue] == 1) {

            type = @"type_one";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

        else if ([[object iden]intValue] == 2) {

          type = @"type_two";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

        else if ([[object iden]intValue] == 3) {

            type = @"type_three";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

        else if ([[object iden]intValue] == 4) {

            type = @"type_four";

            CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

            MKPointAnnotation *annotationPoint = [[MKPointAnnotation alloc] init];
            annotationPoint.coordinate = annotationCoord;
            annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
            annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];
            [map addAnnotation:annotationPoint];
        }

这些是我在地图上添加的四种类型的对象

当我进入这个方法

代码语言:javascript
复制
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {

    MKAnnotationView *view = nil;
    if (annotation != mapView.userLocation) {

            if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 1){

                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_one"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_one"];
                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                    view.image = [UIImage imageNamed:@"type_one.png"];
                }

            }

            else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 2){

                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_two"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_two"];

                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                    view.image = [UIImage imageNamed:@"type_two.png"];
                }
            }
            else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 3){


                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_three"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_three"];

                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(open:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                    view.image = [UIImage imageNamed:@"type_three.png"];
                }

            }
            else if ([[[arrayResults objectAtIndex:countPoint]iden]intValue] == 4){

                view = [mapView dequeueReusableAnnotationViewWithIdentifier:@"type_four"];
                if (!view) {

                    view = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"type_four"];

                    view.canShowCallout = YES;

                    UIButton* aButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
                    [aButton addTarget:self action:@selector(openScheda:) forControlEvents:UIControlEventTouchUpInside];
                    [aButton setTag:countPoint+100];
                    view.rightCalloutAccessoryView = aButton;

                  view.image = [UIImage imageNamed:@"type_four.png"];

                }
            }
countPoint++;
}

问题是标记的类型不符合数组元素.但我不明白。也就是说,如果一个标记有图像"type_one",则在弹出中显示type_four...it的“标题”不对应。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-31 15:03:24

您的注释需要“知道”它的类型,这样您就可以在viewForAnnotation中创建正确的视图。为此,对MKPointAnnotation进行子类化,向其添加一个NSInteger值以存储数组索引。

请参阅MKPointAnnotation add extra property,但您将添加一个名为index的NSInteger属性。

在创建注释时,请设置以下属性:

代码语言:javascript
复制
for  (int i = 0; i<arrayResults.count; i++)
{
    object = [arrayResults objectAtIndex:i];

    CLLocationCoordinate2D annotationCoord = CLLocationCoordinate2DMake([[[object coord]objectForKey:@"latitude"] floatValue], [[[object coord]objectForKey:@"longitude"] floatValue]);

    // MKMyPointAnnotation is your MKPointAnnotation subclass
    MKMyPointAnnotation *annotationPoint = [[MKMyPointAnnotation alloc] init];
    annotationPoint.coordinate = annotationCoord;
    annotationPoint.title = [NSString stringWithFormat:@"%@",[object nome_obj]];
    annotationPoint.subtitle = [NSString stringWithFormat:@"%@",[object address]];

    annotationPoint.index = i;                                // store the index

    [map addAnnotation:annotationPoint];
}

然后在您的viewForAnnotation中,将注释转换为您的子类,然后取消引用类型:

代码语言:javascript
复制
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
{
 MKMyPointAnnotation *myAnnotation = (MKMyPointAnnotation *)annotation;
 object = [arrayResults objectAtIndex:myAnnotation.index];      // <-- your index property

 switch ([[object iden] intValue])
 {
  case 1:                                 // type one
    .
    .
    .

 }

.
.
.
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20858866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档