我正在尝试将我的引脚颜色更改为紫色,当我这样做时,我失去了标题。代码是:
- (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属性,但没有一个。无论如何我可以解决这个问题吗?
答案 0 :(得分:2)
在viewForAnnotation
中,您需要将canShowCallout
设置为YES
(默认情况下为NO
):
pinView.pinColor = MKPinAnnotationColorPurple;
pinView.canShowCallout = YES;
pinView
的{{1}}类型的属性,用于在MKPointAnnotation
中创建注释对象。然后在viewDidLoad
中,您有一个名为viewForAnnotation
的{{1}}类型的局部变量。虽然这里没有命名冲突,但它会导致并暗示一些概念上的混淆。 pinView
是注释模型类,而MKPinAnnotationView
是注释视图类 - 它们是完全不同的东西。例如,将注释属性命名为MKPointAnnotation
或MKPinAnnotationView
会更好。 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)