尝试更改 MKPointAnnotation 颜色但丢失标题
Trying to change MKPointAnnotation colour but losing the title
我正在尝试将图钉颜色更改为紫色,但当我这样做时我失去了标题。代码是:
- (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 设置标题 属性,但没有。无论如何我可以解决这个问题吗?
在viewForAnnotation
中,需要将canShowCallout
设置为YES
(默认为NO
):
pinView.pinColor = MKPinAnnotationColorPurple;
pinView.canShowCallout = YES;
几个不相关的点:
- 您似乎有一个名为
pinView
的 MKPointAnnotation
类型的 属性,您正在使用它在 viewDidLoad
中创建注释对象。然后在 viewForAnnotation
中,您有一个名为 pinView
且类型为 MKPinAnnotationView
的局部变量。这里虽然没有命名上的冲突,但是却造成并暗示了一些概念上的混乱。 MKPointAnnotation
是注释 model class 而 MKPinAnnotationView
是注释 view class - - 它们是完全不同的东西。例如,将注释命名为 属性 pin
或 userAnnotation
会更好。
viewForAnnotation
中的这条评论:
//now we can throw an image in there
似乎暗示此时您可以在视图中设置自定义图像。不建议在 MKPinAnnotationView
中设置自定义图像,因为 class 旨在以三种颜色之一显示默认图钉图像。要使用自定义图像,请改为创建普通图像 MKAnnotationView
。
pinColor
属性 在 iOS 9 中被弃用。从 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 中提供了更多信息。
我刚升级到ios10,苹果改了api。
不再使用 pinColor,而是使用 tintColor
新:
MKPinAnnotationView *view = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
view.tintColor = [UIColor purpleColor];
请注意,当用户点击时会显示图钉标题:
如果此 属性 的值为真,则当用户点击选定的注释视图时会显示标准标注气泡。标注使用来自关联注释 object. 的标题和副标题文本
( https://developer.apple.com/documentation/mapkit/mkannotationview/1452451-canshowcallout )
我正在尝试将图钉颜色更改为紫色,但当我这样做时我失去了标题。代码是:
- (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 设置标题 属性,但没有。无论如何我可以解决这个问题吗?
在viewForAnnotation
中,需要将canShowCallout
设置为YES
(默认为NO
):
pinView.pinColor = MKPinAnnotationColorPurple;
pinView.canShowCallout = YES;
几个不相关的点:
- 您似乎有一个名为
pinView
的MKPointAnnotation
类型的 属性,您正在使用它在viewDidLoad
中创建注释对象。然后在viewForAnnotation
中,您有一个名为pinView
且类型为MKPinAnnotationView
的局部变量。这里虽然没有命名上的冲突,但是却造成并暗示了一些概念上的混乱。MKPointAnnotation
是注释 model class 而MKPinAnnotationView
是注释 view class - - 它们是完全不同的东西。例如,将注释命名为 属性pin
或userAnnotation
会更好。 viewForAnnotation
中的这条评论://now we can throw an image in there
似乎暗示此时您可以在视图中设置自定义图像。不建议在
MKPinAnnotationView
中设置自定义图像,因为 class 旨在以三种颜色之一显示默认图钉图像。要使用自定义图像,请改为创建普通图像MKAnnotationView
。
pinColor
属性 在 iOS 9 中被弃用。从 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 中提供了更多信息。
我刚升级到ios10,苹果改了api。
不再使用 pinColor,而是使用 tintColor
新:
MKPinAnnotationView *view = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
view.tintColor = [UIColor purpleColor];
请注意,当用户点击时会显示图钉标题:
如果此 属性 的值为真,则当用户点击选定的注释视图时会显示标准标注气泡。标注使用来自关联注释 object. 的标题和副标题文本 ( https://developer.apple.com/documentation/mapkit/mkannotationview/1452451-canshowcallout )