Wil*_*ill 3 iphone xcode objective-c ios
我有一张地图,有3类兴趣点.目前我已让它们显示,但它们都是相同的颜色.如何根据它们所属的类别让它们显示颜色?
我有一个搜索周围,找不到任何我能理解的应用于我的代码.
这是我当前用于注释引脚的代码:
-(void)pins:(NSString *)name lat:(NSString *)lat lon:(NSString *)lon poiID:(NSString *)poiID
{
//cast string to float
CGFloat Lat = (CGFloat)[lat floatValue];
CGFloat Lon = (CGFloat)[lon floatValue];
//Set coordinates of pin
CLLocationCoordinate2D coordinate;
coordinate.latitude = Lat;
coordinate.longitude = Lon;
//Create Pin
MKPointAnnotation *annotation = [[MKPointAnnotation alloc] init];
//set details
[annotation setCoordinate:coordinate];
[annotation setTitle:name];
[annotation setAccessibilityLabel:poiID]; //set the label eq to the id so we know which poi page to go to
// Add pin to map
[self.showMapView addAnnotation:annotation];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
//create annotation
MKPinAnnotationView *pinView = (MKPinAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pinView"];
if (!pinView) {
pinView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pinView"];
pinView.pinColor = MKPinAnnotationColorRed;
pinView.animatesDrop = FALSE;
pinView.canShowCallout = YES;
//details button
UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
pinView.rightCalloutAccessoryView = rightButton;
} else {
pinView.annotation = annotation;
}
return pinView;
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码的其余部分,需要它.
谢谢你的帮助.
这很简单,只需添加一个if语句来检查标题或副标题.当我使用地图时,我的注释类有一个副标题,它会说出这个地方是什么,即酒店,机场等.我只想添加一个if语句来检查,然后设置引脚点是什么并设置什么颜色我想要销钉
if([annotation.subtitle isEqualToString:@"Hotel"])
{
pinView.animatesDrop=YES;
pinView.pinColor=MKPinAnnotationColorPurple;
}else if([annotation.subtitle isEqualToString:@"Airport"])
{
pinView.animatesDrop=YES;
pinView.pinColor=MKPinAnnotationColorRed;
}
Run Code Online (Sandbox Code Playgroud)
或者如果你想要它是一个图像,只需使用
pinView.image = [UIImage imageNamed:@"airportMarker.png"];
Run Code Online (Sandbox Code Playgroud)
编辑:更新的代码
像这样创建一个自定义注释类
@interface MyAnnotation : NSObject<MKAnnotation>
{
CLLocationCoordinate2D coordinate;
NSString* title;
NSString* subtitle;
NSInteger categoryID;
}
@property NSInteger categoryID;
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString* title;
@property (nonatomic, copy) NSString* subtitle;
@end
Run Code Online (Sandbox Code Playgroud)
然后,当您将对象添加到屏幕时,为每个对象提供一个ID,即
CLLocationCoordinate2D hotelCoordinates1;
hotelCoordinates1.latitude = 35.38355;
hotelCoordinates1.longitude = 1.11004;
MyAnnotation* exampleHotel=[[MyAnnotation alloc] init];
exampleHotel.coordinate=hotelCoordinates1;
exampleHotel.title=@"Example Hotel";
exampleHotel.subtitle=@"Hotel";
exampleHotel.categoryID = 1;
Run Code Online (Sandbox Code Playgroud)
然后在这个方法里面
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
//create annotation
Run Code Online (Sandbox Code Playgroud)
就这样做
if([(MyAnnotation*)annotation categoryID] == 1)
{
}
Run Code Online (Sandbox Code Playgroud)
您需要确保将注释强制转换为您创建的类的名称.就是这样.希望有所帮助!!
| 归档时间: |
|
| 查看次数: |
5654 次 |
| 最近记录: |