我有一个json文件,在这个json中我有不同的纬度和经度和状态。我想检查一下我的状态,并根据我的地图上的lat和long show status pin。我的意思是如果我的状态是活动的:如果我的状态已过期,则为绿色引脚显示如果我的状态为机密,则为红色,显示灰色引脚。
这是我的json:
[
{
"status": "active",
"latitude": 56.715866,
"longitude": -118.281757
},
{
"status": "expired",
"latitude": 56.715860,
"longitude": -118.281757
},
{
"status": "confidential",
"latitude": 56.715111,
"longitude": -118.281117
}]
我可以在我的日志上打印所有json这是我的方法:
-(void)getPin
{
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:BASED_URL]];
[request setHTTPMethod:@"GET"];
[request setValue:@"/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
NSURLResponse *response;
NSData *GETReply = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response error:nil];
NSString *theReply = [[NSString alloc] initWithBytes:[GETReply bytes] length:[GETReply
length] encoding: NSASCIIStringEncoding];
NSLog(@"Reply: %@", theReply);
}
我的xcode中有3针图像我也有mapView。我的问题是如何根据我在地图上的json显示这3个引脚?
提前致谢! 感谢您能否提供代码
答案 0 :(得分:0)
我为你做了这个demo project。
为了显示您自己的注释,您首先需要创建一个确认MKAnnotation
协议的类。我们称这个班为Location
。您需要将此类的实例添加到地图中,以告知地图注释的位置。您可以选择在此类中添加title和subtile,以告诉地图注释的标题和副标题。
@interface Location : NSObject<MKAnnotation>
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, readonly, copy) NSString *title;
@property (nonatomic, readonly, copy) NSString *subtitle;
- (instancetype)initWithCoordinate:(CLLocationCoordinate2D)coordinate title:(NSString *)title subTitle:(NSString *)subTitle;
@end
现在转到包含地图的视图控制器。在地图中创建并添加注释。另外,将地图的代理设置为self
:
Location * myLocation = [[Location alloc]initWithCoordinate:CLLocationCoordinate2DMake(56.715866, -118.281757) title:@"My Land" subTitle:@"haha~"];
[_mapView addAnnotation:myLocation];
_mapView.delegate = self;
控制器应向MKMapViewDelegate
确认以显示自定义注释。告诉地图查看如何显示注释的方法是:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id < MKAnnotation >)annotation
{
MKAnnotationView * view = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:@"Location"];
view.image = [UIImage imageNamed:@"someImage"];
view.canShowCallout = YES;
return view;
}
您可以设置view.canShowCallout = YES;
,这样当您触摸注释时,它会在annotation
中显示标题和子标题。
如果您有多个注释,则可以方便地将属性@property (nonatomic, strong) UIImage * image
添加到Location
类中。哪个可以保存注释的图像,并在mapView:viewForAnnotation:
设置view.image = annotation.image
。