0

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

我需要找到一种方法来在加载地图时通过从另一个屏幕按下按钮来更改图钉颜色。

例如,原来的图钉都是红色的,但是当我进入一个页面并按下地图按钮时,它必须将我引导到地图视图,并且该位置的坐标必须用绿色图钉标记。

我已经设置好了地图,并设置了使引脚全部变红的设置。

任何帮助表示赞赏。

所以,只是一个回顾:带有红色图钉的地图页面->单击图钉,单击注释(另一个视图打开)->在视图内部,有一个按钮(例如@“更改图钉颜色”),单击按钮- > 带有绿色图钉的地图页面打开。(看上面的例子和图片。)

4

2 回答 2

0

您应该做的是更改代表该引脚的数据中的某些内容。注释。当您切换回地图时,将重新绘制注释并viewForAnnotation调用您的方法,此时您检查属性并绘制正确的颜色。

于 2013-05-21T23:57:08.393 回答
0

你为什么不直接声明一个新的构造函数来设置你选择的颜色呢?

// ViewControllerB .h file
@interface ViewControllerB
{
    UIColor *pinColor;
}

-(id)initWithPinColor:(UIColor *)chosenPinColor;

...

// ViewControllerB .m file
-(id)initWithPinColor:(UIColor *)chosenPinColor
{
    self = [super init];

    if(self)
    {
        pinColor = chosenPinColor;
    }

    return self;
}

...

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    if([annotation isKindOfClass:[MKUserLocation class]])
    {
        return nil;
    }

    static NSString *annotationViewID = @"annotationViewID";

    MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:annotationViewID];

    if(!annotationView)
    {
        annotationView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotationViewID] autorelease];
    }

    // this will use the pinColor stored in the constructor
    annotationView.pinColor = pinColor;        
    annotationView.canShowCallout = YES;
    annotationView.animatesDrop = YES;

    annotationView.annotation = annotation;

    return annotationView;
}

然后您可以在 ViewControllerA 中简单地执行此操作:

// ViewControllerA .m file
#import "ViewControllerB.h"

...

-(void)showMapWithPinColor:(id)sender
{
    ViewControllerB *vc = [[ViewControllerB alloc] initWithPinColor:[UIColor green]];

    [self.navigationController pushViewController:vc animated:YES];
}
于 2013-05-27T04:09:31.070 回答