博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MapKit 添加大头针
阅读量:4581 次
发布时间:2019-06-09

本文共 2946 字,大约阅读时间需要 9 分钟。

#import "ViewController.h"

#import <MapKit/MapKit.h>

#import "MYAnnotation.h"

 

@interface ViewController ()<MKMapViewDelegate>

@property(nonatomic,strong)CLLocationManager *mag;

 

 

@property(nonatomic,strong)CLGeocoder *ceocoder;

@property(nonatomic,strong)MKMapView*mapView;

 

 

@end

 

@implementation ViewController

 

-(MKMapView*)mapView

{

    if (!_mapView) {

        _mapView=[[MKMapView alloc]init];

    }

    return _mapView;

}

 

 

- (void)viewDidLoad {

    [super viewDidLoad];

    self.mag=[[CLLocationManager alloc]init];

    [self.mag requestAlwaysAuthorization];

    [self.mag requestWhenInUseAuthorization];

    

    //必须要记录要不不会进行用户权限验证

//   CLLocationManager *mags=[[CLLocationManager alloc]init];

//    [mags requestAlwaysAuthorization];

//    [mags requestWhenInUseAuthorization];

 

    

    

    self.mapView.frame=self.view.bounds;

    //self.mapView.visibleMapRect=MKMapRectMake(20, 20, 200, 200);

     [self.view addSubview:self.mapView];

    

    //设置地图的代理

    self.mapView.delegate=self;

    self.mapView.showsUserLocation=YES;

    self.mapView.userTrackingMode=MKUserTrackingModeFollow;

   

    

 

}

//更新用户信息

-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

{

    [self.ceocoder reverseGeocodeLocation:userLocation.location completionHandler:^(NSArray *placemarks, NSError *error) {

        CLPlacemark *mark=[placemarks firstObject];

        userLocation.title=mark.name;

        userLocation.subtitle=mark.locality;

    }];

    //设置地图显示的区域

    CLLocationCoordinate2D center=userLocation.location.coordinate;

    //指定经纬度跨度

    MKCoordinateSpan Span=MKCoordinateSpanMake(15, 15);

    //将用户当前位置作为中心

    MKCoordinateRegion region=MKCoordinateRegionMake(center, Span);

    //设置显示区域

    [self.mapView setRegion:region animated:YES];

}

 

//加载大头针

-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation

{

    if ([annotation isKindOfClass:[MKUserLocation class]]) {

        return nil;

    }

    static NSString*ID=@"anno";

    MKPinAnnotationView *annotationView=(MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:ID];

    if (annotationView==nil) {

        annotationView=[[MKPinAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:ID];

    }

    //设置大头针的颜色

    annotationView.pinColor=MKPinAnnotationColorPurple;

    //设置大头针动画

    annotationView.animatesDrop=YES;

    

    return annotationView;

}

 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    CGPoint point=[[touches anyObject] locationInView:self.mapView];

    CLLocationCoordinate2D coordinate=[self.mapView convertPoint:point toCoordinateFromView:self.mapView];

    //添加大头针

    MYAnnotation *anno=[[MYAnnotation alloc]init];

    anno.title=@"你想要的";

    anno.subtitle=@"可以用CLGeocoder解析出来位置";

    anno.coordinate=coordinate;

    [self.mapView addAnnotation:anno];

    

} 

@end

#import <Foundation/Foundation.h>

#import <MapKit/MapKit.h>

 

@interface MYAnnotation : NSObject<MKAnnotation>

 

@property(nonatomic,assign)CLLocationCoordinate2D coordinate;

 

@property(nonatomic,copy)NSString*title;

@property(nonatomic,copy)NSString*subtitle;

 

 

@end

@implementation MYAnnotation

 

@end

转载于:https://www.cnblogs.com/tangranyang/p/4655808.html

你可能感兴趣的文章
web基础,用html元素制作web页面
查看>>
Ubuntu 16.04安装GIMP替代PS
查看>>
使用SmartQQ实现的智能回复(Web QQ协议)
查看>>
redis下的字符串处理
查看>>
Servlet中Cookie的用法
查看>>
开源,选择Google Code还是Sourceforge
查看>>
传感器之超声波测距HC-SR04
查看>>
浅谈Java中的hashCode方法
查看>>
自己编写类似于枚举的类型(多例模式)
查看>>
Asp: Server.mapPath() 注意事项
查看>>
关于减少BUG的思考
查看>>
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name) 中文显示乱码
查看>>
第二章随笔
查看>>
string.Format出现异常"输入的字符串格式有误"的解决方法
查看>>
SSL 1010——方格取数
查看>>
DB2数据库管理手册word版
查看>>
JDBC基础
查看>>
关于同余与模运算的总结
查看>>
Python——Scrapy爬取链家网站所有房源信息
查看>>
洛谷 P3804 [模板] 后缀自动机
查看>>