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

  • 相关阅读:
    jython resources
    Installing a Library of Jython ScriptsPart of the WebSphere Application Server v7.x Administration Series Series
    jython好资料
    ulipad install on 64bit win7 has issue
    an oracle article in high level to descibe how to archtichre operator JAVA relevet project
    table的宽度,单元格内换行问题
    Linux常用命令大全
    dedecms系统后台登陆提示用户名密码不存在
    登录织梦后台提示用户名不存在的解决方法介绍
    Shell常用命令整理
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7039619.html
Copyright © 2011-2022 走看看