• 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];
    }

  • 相关阅读:
    LeetCode:Validate Binary Search Tree
    二叉树的非递归遍历(非递归使用栈、非递归不使用栈)
    scala 基础语法
    scala VS python2 (linux or shell)
    web压力测试工具
    Elasticsearch cluster health: yellow unassigned shards
    GC overhead limit exceeded
    linux定时任务的设置
    linux CPU占用率高(转)
    JQuery Sparkline 说明文档
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7039619.html
Copyright © 2020-2023  润新知