ios中使用mkmapview怎样开启定位
发布网友
发布时间:2022-03-04 04:42
我来回答
共1个回答
热心网友
时间:2022-03-04 06:12
1、新建项目,将ios的提供位置服务和地图服务的库加入到项目中 点项目名->Build Phases点开Link Binary With Libraries
将CoreLocation和MapKit两个库加入到项目中,前者是ios的位置服务库,后者是操作MKMapView的库
2、新建UIViewController 控件布局和设置好关系属性。导入<CoreLocation/CoreLocation.h>和<MapKit/MapKit.h>
还要让控制器类实现MKMapViewDelegate协议
[objc] view plain copy print?
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
@interface MainViewController : UIViewController<MKMapViewDelegate,UITextFieldDelegate>
//经度
@property (weak, nonatomic) IBOutlet UITextField *longitudeText;
//纬度
@property (weak, nonatomic) IBOutlet UITextField *latitudeText;
//地图
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
//自己经度
@property (weak, nonatomic) IBOutlet UILabel *longitudeLabel;
//自己纬度
@property (weak, nonatomic) IBOutlet UILabel *latitudeLabel;
//放置标注Button
- (IBAction)annotationAction:(id)sender;
@end
3、MKMapView可以通过 setShowsUserLocation:YES这个方法来获取自己的位置,并且当地图更新自己的位置后会调用
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation的一个协议的委托方法,我要在这个方法里面试实现当地图位置更新后/获取自己位置后对地图进行放大。
首先在viewDidLoad方法里对让地图调用setShowsUserLocation方法来实现地图的定位,并且设置MapView的委托类。
[objc] view plain copy print?
- (void)viewDidLoad
{
//设置MapView的委托为自己
[self.mapView setDelegate:self];
//标注自身位置
[self.mapView setShowsUserLocation:YES];
[super viewDidLoad];
}
然后实现-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation方法:
[objc] view plain copy print?
//MapView委托方法,当定位自身时调用
-(void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
CLLocationCoordinate2D loc = [userLocation coordinate];
//放大地图到自身的经纬度位置。
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(loc, 250, 250);
[self.mapView setRegion:region animated:YES];
}
CLLocationCoordinate2D 是一个结构体记录经纬度,通过地图的获取的location来给其赋值。
运行一下程序地图载入的同时获得自身的位置,并且会自动放大到你所在的位置。
调试位置:
模拟器在运行的时候,可以自定义的设置其自身所在的位置
4、获取自身的经纬度显示在两个label上,还是在-(void)mapView:(MKMapView *)mapView
didUpdateUserLocation:(MKUserLocation *)userLocation方法里面实现,通过MKUserLocation这个类里面有经度和纬度的属性,直接拿出来显示在label上