zoukankan      html  css  js  c++  java
  • 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];
    }

  • 相关阅读:
    C语言学习笔记之 程序流程结构
    C语言学习笔记之 类型转换
    C语言学习笔记之 标准输入输出函数
    C语言学习笔记之 运算符
    bzoj 4322 东西分配问题
    bzoj 3240 矩阵乘法+十进制快速幂
    bzoj 4017 子序列和的异或以及异或的和
    bzoj 1934 最小割
    bzoj 3275 最小割
    bzoj 3931 最短路+最大流
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7039619.html
Copyright © 2011-2022 走看看