尝试更改MKPointAnnotation颜色但丢失标题

时间:2015-03-28 09:34:22

标签: ios objective-c mkpinannotationview

我正在尝试将我的引脚颜色更改为紫色,当我这样做时,我失去了标题。代码是:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationController.navigationBarHidden=YES;

    //init the location manager
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [self.locationManager requestWhenInUseAuthorization];
    self.mapView.showsUserLocation=YES;

    self.userGeoPoint=self.message[@"userLocation"];
    self.pinView = [[MKPointAnnotation alloc] init];

    self.pinView.title=self.message[@"fromUser"];
    self.coord = CLLocationCoordinate2DMake(self.userGeoPoint.latitude, self.userGeoPoint.longitude);
    self.pinView.coordinate=self.coord;
    //use a slight delay for more dramtic zooming
    [self performSelector:@selector(addPin) withObject:nil afterDelay:0.5];
}

-(void)addPin{

    [self.mapView addAnnotation:self.pinView];
    [self.mapView selectAnnotation:self.pinView animated:YES];
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.coord, 800, 800);
    [self.mapView setRegion:[self.mapView regionThatFits:region] animated:YES];

}

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotationPoint
{
    if ([annotationPoint isKindOfClass:[MKUserLocation class]])//keep the user as default
        return nil;

    static NSString *annotationIdentifier = @"annotationIdentifier";
    MKPinAnnotationView *pinView = [[MKPinAnnotationView alloc]initWithAnnotation:annotationPoint reuseIdentifier:annotationIdentifier];
    pinView.pinColor = MKPinAnnotationColorPurple;
    //now we can throw an image in there

    return pinView;
}

我尝试为MKPinAnnotation设置title属性,但没有一个。无论如何我可以解决这个问题吗?

4 个答案:

答案 0 :(得分:2)

viewForAnnotation中,您需要将canShowCallout设置为YES(默认情况下为NO):

pinView.pinColor = MKPinAnnotationColorPurple;
pinView.canShowCallout = YES;


<小时/> 一些不相​​关的观点:

  1. 您似乎拥有一个名为pinView的{​​{1}}类型的属性,用于在MKPointAnnotation中创建注释对象。然后在viewDidLoad中,您有一个名为viewForAnnotation的{​​{1}}类型的局部变量。虽然这里没有命名冲突,但它会导致并暗示一些概念上的混淆。 pinView是注释模型类,而MKPinAnnotationView是注释视图类 - 它们是完全不同的东西。例如,将注释属性命名为MKPointAnnotationMKPinAnnotationView会更好。
  2. pin中的评论:

    userAnnotation

    似乎暗示您可以在此时在视图中设置自定义图像。建议不要在viewForAnnotation中设置自定义图像,因为该类旨在以三种颜色之一显示默认图像。要使用自定义图片,请改为创建普通//now we can throw an image in there

答案 1 :(得分:1)

iOS 9中已弃用pinColor属性。从iOS 9开始,您应使用pinTintColor,而UIColor而不是MKPinAnnotationColor

旧: MKPinAnnotationView *view = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil]; view.pinColor = MKPinAnnotationColorPurple;

新: MKPinAnnotationView *view = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil]; view.pinTintColor = [UI Color purpleColor];

Apple docs中提供了更多信息。

答案 2 :(得分:1)

我刚升级到ios 10,苹果改变了api。

pinColor不再使用,而是使用tintColor

新:

 MKPinAnnotationView *view = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
 view.tintColor = [UIColor purpleColor];

答案 3 :(得分:0)

请注意,当用户点击它时,将显示图钉标题:

如果此属性的值为true,则在用户点击选定的注释视图时会显示标准的标注气泡。标注使用关联注释对象中的标题和副标题文本。https://developer.apple.com/documentation/mapkit/mkannotationview/1452451-canshowcallout