码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 系统地图实现及定位

时间:2015-06-24 19:00:06      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:ios


1:添加库CoreLocation.framework,MApKit.framework;

2:@property (nonatomic, strong) CLLocationManager *locationManager;
@property (nonatomic, strong) MKMapView *mapView;
@property (nonatomic, strong) CLLocation *checkinLocation;
@property (strong, nonatomic) NSString *currentLatitude; //纬度
@property (strong, nonatomic) NSString *currentLongitude; //经度

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title=@"地图";
    [self initRightBarButton];
    [self setupLocationManager];
    [self setupMapView];
}
-(void)initRightBarButton{
    UIButton* _btnRight = [UIButton buttonWithType:UIButtonTypeCustom];
    [_btnRight setFrame:CGRectMake(0, 0, 39, 34)];
    UIImage *imgNormal = [UIImage imageNamed:@"gpsbtn_dianji"];
    UIImage *imgSelect = [UIImage imageNamed:@"gpsbtn"];
    [_btnRight setBackgroundImage:imgNormal forState:UIControlStateNormal];
    [_btnRight setBackgroundImage:imgSelect forState:UIControlStateSelected];
    _btnRight.showsTouchWhenHighlighted = YES;
    [_btnRight addTarget:self action:@selector(showUserLocation:) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:_btnRight];
    self.navigationItem.rightBarButtonItem = buttonItem;
}
- (void)setupLocationManager{
    _locationManager=[[CLLocationManager alloc]init];
    _locationManager.desiredAccuracy=kCLLocationAccuracyBestForNavigation;
    //每隔多少米定位一次(这里的设置为任何的移动)
    _locationManager.distanceFilter=kCLDistanceFilterNone;
    //iOS 8.0以后
    if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [self.locationManager requestWhenInUseAuthorization];
        [self.locationManager startUpdatingLocation];
    }
}
- (void)setupMapView{
    _mapView=[[MKMapView alloc]initWithFrame:self.view.bounds];
    [self.view addSubview:_mapView];
    _mapView.delegate=self;
    //用户位置追踪(用户位置追踪用于标记用户当前位置,此时会调用定位服务)
    _mapView.userTrackingMode=MKUserTrackingModeFollowWithHeading;
    _mapView.mapType=MKMapTypeStandard;
    [self initLocationData];
}
- (void)initLocationData{
    NSMutableArray *arr=[[NSMutableArray alloc]init];
    for (int i=0; i<1; i++) {
        CLLocationDegrees lat=[self.currentLatitude  doubleValue];
        CLLocationDegrees longi=[self.currentLongitude doubleValue];
        NSString *lacationName=@"当前位置";
        BasicMapAnnotation *anno=[[BasicMapAnnotation alloc]initWithLatitude:lat andLongitude:longi];
        anno.title=lacationName;
        anno.index=i;
        [arr addObject:anno];
    }
    [_mapView showAnnotations:arr animated:YES];
}
- (void)showUserLocation:(id)sender{
    MKCoordinateSpan span=MKCoordinateSpanMake(0.01, 0.02);
    MKCoordinateRegion region=MKCoordinateRegionMake(_mapView.userLocation.coordinate, span);
    [_mapView setRegion:region animated:YES];
}
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation{
    NSLog(@"纬度:%f 经度:%f",userLocation.location.coordinate.latitude,userLocation.location.coordinate.longitude);
    self.currentLatitude  = [NSString stringWithFormat:@"%.4f",userLocation.location.coordinate.latitude];
    self.currentLongitude = [NSString stringWithFormat:@"%.4f",userLocation.location.coordinate.longitude];
    [self initLocationData];
    //设置地图显示范围(如果不进行区域设置会自动显示区域范围并指定当前用户位置为地图中心点)
    //MKCoordinateSpan span=MKCoordinateSpanMake(0.01, 0.01);
    //MKCoordinateRegion region=MKCoordinateRegionMake(_mapView.region.center, span);
    //[_mapView setRegion:region animated:true];
}
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
    if ([annotation isKindOfClass:[BasicMapAnnotation class]]) {
        static NSString *key=@"AnnotationKey";
        MKAnnotationView *annotationView=[_mapView dequeueReusableAnnotationViewWithIdentifier:key];
        BasicMapAnnotation *aa=(BasicMapAnnotation *)annotation;
        if (!annotationView) {
            annotationView=[[MKAnnotationView alloc]initWithAnnotation:aa reuseIdentifier:key];
            CGRect frame=annotationView.frame;
            frame.size.width=14;
            frame.size.height=35;
            annotationView.frame=frame;
            annotationView.canShowCallout=YES;
            UIImageView*imageview=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"地图标注"]];
            imageview.frame=frame;
            [annotationView addSubview:imageview];
        }
        return annotationView;
    }
    return nil;
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

iOS 系统地图实现及定位

标签:ios

原文地址:http://blog.csdn.net/darongzi1314/article/details/46624293

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!