mapView 地图视图

1.在Info.plist 添加下面两个

NSLocationAlwaysUsageDescription    //NS位置总是使用描述

NSLocationWhenInUseUsageDescription   //NS位置在使用使用描述

2.在工程里“Build Phases”—> Link Binary With Libraries  添加 MapKit.framework

3.main.storyboard 里添加 MapKit View视图

#import "ViewController.h"
#import <CoreLocation/CoreLocation.h> //1
#import <MapKit/MapKit.h> //11
@interface ViewController ()<CLLocationManagerDelegate, MKMapViewDelegate>
{
    CLLocationManager *_locationMgr; //1
    CLGeocoder *_geocoder;  //地理位置编码与反编码 34
}
@property (weak, nonatomic) IBOutlet MKMapView *mapView;  //10
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //35
    _geocoder = [[CLGeocoder alloc]init];
   
    //创建对象 1
    _locationMgr = [[CLLocationManager alloc]init];
    //定位精度, 精度越高,定位所需时间越长  // 2  kCLLocationAccuracyBest 定位精度最好的
    _locationMgr.desiredAccuracy = kCLLocationAccuracyBest;
    //重新定位所需移动的最小距离,None表示任意距离都会导致重新定位 / 3
    _locationMgr.distanceFilter = kCLDistanceFilterNone;
    //添加_locationMgr的代理CLLocationManagerDelegate
    _locationMgr.delegate = self;  //4
   
    //开始更新地理位置  5  locationServicesEnabled (启用定位服务)
    if ([CLLocationManager locationServicesEnabled]) {
       
        //请求用户授权  9
        [_locationMgr requestAlwaysAuthorization];
       
       
        //startUpdatingLocation 开始更新位置  6
        [_locationMgr startUpdatingLocation];
       
       
    }
    else
    {
        NSLog(@"location serivce not enabled!");
    }
   
    _mapView.delegate = self;
   
}
#pragma mark - mapView

//将标注显示出来  addAnnotation时,  会调用该方法  19
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    static NSString *indentifer = @"anno";  //20
   
    if (_mapView.userLocation != annotation) {
        //不是用户当前位置则创建
        MKAnnotationView *pinAnno = (MKAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:indentifer];  //21
        if (pinAnno == nil) {
            pinAnno = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:indentifer];   //22
            //从天而降的动画
//            pinAnno.animatesDrop = YES;//23
//            pinAnno.pinColor = MKpinAnnotationColorPurple;   //24
           
            pinAnno.image = [UIImage imageNamed:@"icon_route_start"]; //25
           
            pinAnno.canShowCallout = YES;  //26
            UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 44, 44)];  //27
            imgView.image = [UIImage imageNamed:@"01"]; //28
              //
            //给标注设置左弹出图片  //29
            pinAnno.leftCalloutAccessoryView = imgView;
           
            UIButton *btn = [UIButton buttonWithType:UIButtonTypeInfoLight];
            //给标注添加按钮  32
            pinAnno.rightCalloutAccessoryView = btn;
           
        }
        return pinAnno;  //23
    }
    else
    {
        CLLocationCoordinate2D userLocation =  _mapView.userLocation.location.coordinate;
        //打印当前的经度与维度
        NSLog(@"lat:%f, long:%f",userLocation.latitude,userLocation.longitude);
        return nil;
    }
   
   
   
}

#pragma mark - MKMapViewDelegate
//33
- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control  //control就是上面创建的button
{
    NSLog(@"control:%@", control);
}

//加载地图地图视图并失败 时调用 13
- (void)mapViewDidFailLoadingMap:(MKMapView *)mapView withError:(NSError *)error
{
    NSLog(@"%s",__func__);
}
// 地图视图并完成加载地图 14
- (void)mapViewDidFinishLoadingMap:(MKMapView *)mapView
{
    NSLog(@"%s",__func__);
}

#pragma mark -CLLocationManagerDelegate
//获取地理位置时,会调用该方法  didUpdateLocations (并更新位置)  7
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    NSLog(@"locations:%@",locations);
    [_locationMgr stopUpdatingLocation];  //停止定位10
   
    CLLocation *location = locations[0];  //获取一个位置 12
   
    CLLocationCoordinate2D coordinate = location.coordinate; //13
    //让地图定位到指定的点 , span是地图的缩放级别
    MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01);//14
    MKCoordinateRegion region = MKCoordinateRegionMake(coordinate, span);
    [_mapView setRegion:region animated:YES]; //15
   
//    //给地图添加标注
//    MKPointAnnotation *pointAnno = [[MKPointAnnotation alloc]init];  //16
//   
//    pointAnno.coordinate = coordinate; //给标注指定经纬度 17
//   
//    //如果不设置title,则无法弹出气泡信息框
//    pointAnno.title = @"title";  //30
//    pointAnno.subtitle = @"subtitle";  //31
//   
//    [_mapView addAnnotation:pointAnno]; //将标注加入地图 18
   
   
    //地理位置反编码,将经纬度信息转换为真实的位置 36
    [_geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
       
//        NSLog(@"place:%@", placemarks);
        if (error) {
            NSLog(@"error:%@", error); //37
        }
        CLPlacemark *clpk = placemarks[0];  //38  获取位置信息
        NSLog(@"clpk:%@",clpk.addressDictionary);
       
        NSLog(@"city:%@", clpk.addressDictionary[@"City"]);
        NSLog(@"street:%@", clpk.addressDictionary[@"Street"]);
       
        //给地图添加标注
        MKPointAnnotation *pointAnno = [[MKPointAnnotation alloc]init];  //16
       
        pointAnno.coordinate = coordinate; //给标注指定经纬度 17
       
        //如果不设置title,则无法弹出气泡信息框
        pointAnno.title = [NSString stringWithFormat:@"%@",clpk.addressDictionary[@"City"]];  //30
        pointAnno.subtitle = [NSString stringWithFormat:@"%@",clpk.addressDictionary[@"Street"]];  //31
       
        [_mapView addAnnotation:pointAnno]; //将标注加入地图 18
    }];
   
   
}

//获取地理位置出错时,调用此方法  didFailWithError  8
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{

NSLog(@"err:%@",error);
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h> //1
#import <MapKit/MapKit.h> //11
@interface ViewController ()<CLLocationManagerDelegate, MKMapViewDelegate>
{
    CLLocationManager *_locationMgr; //1
    CLGeocoder *_geocoder;  //地理位置编码与反编码 34
}
@property (weak, nonatomic) IBOutlet MKMapView *mapView;  //10
@end

@implementation ViewController

时间: 2024-08-24 04:24:22

mapView 地图视图的相关文章

[Swift通天遁地]一、超级工具-(10)使用地图视图MKMapView的相机功能实现创建三维地图

本文将演示使用地图视图MKMapView的相机功能实现创建三维地图. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 //在当前的类文件中引入所需的类库 3 import MapKit 4 5 class ViewController: UIViewController { 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 // Do any additiona

iOS:UIMapView地图视图控件的简单使用

可以通过设置MKMapView的mapViewType设置地图类型 MKMapTypeStandard 普通地图 MKMapTypeSatellite 卫星云图 MKMapTypeHybrid 普通地图覆盖于卫星云图之上 @property (nonatomic) MKMapType mapType;  //地图类型 @property (nonatomic) MKCoordinateRegion region;  //位置区域 @property (nonatomic) CLLocationC

百度地图第二次地图视图不刷新

项目中使用了百度地图的关键字输入提示词,但是在项目中,第一次的输入提示会自动加载, 第二次页面不刷新的话,是无法再次加载的 通过审查元素发现第二次加载时,下拉框元素的层级过低,导致无法显示 .只需要 .tangram-suggestion-main{ z-index: 99 ;} 提高下拉框元素层级,即可正常显示 原文地址:https://www.cnblogs.com/suiyide/p/9235236.html

ios开发系统地图知识

现在很多社交.电商.团购应用都引入了地图和定位功能,地图功能不再是地图应用和导航应用所特有的.目前地图和定位功能已经大量引入到应用开发中.今天就和大家一起看一下iOS如何进行地图开发. 一.Core Location定位使用 在iOS中通过Core Location框架进行定位操作.Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图开发要配合定位框架使用.在Core Location中主要包含了定位.地理编码(包括反编码)功能. 定位是一个很常用的功

ios开发--高德地图SDK使用简介

高德LBS开放平台将高德最专业的定位.地图.搜索.导航等能力,以API.SDK等形式向广大开发者免费开放.本章节我们来简单学习一下如何使用它的定位及地图SDK. 一.相关框架及环境配置 地图SDK 对于如何下载SDK,它的官方文档提供了很详细的说明,使用CocoaPods.如果你没有安装CocoaPods,也可以在它的官网直接下载. 接下来只需要将SDK引入工程,完成相关的环境配置即可.在它的官方文档中有详细说明,这里就不重复了. 地图SDK文档 定位SDK 高德 iOS 定位 SDK 提供了不

iOS百度地图简单使用

本文介绍三种接口: 1.基础地图2.POI检索3.定位 首先是配置环境,有两种方法,方法在官方教程里都有,不再多说 1.使用CocoaPods自动配置[这个方法特别好,因为当你使用CocoaPods配置完之后就可以直接使用了,简单到你都不敢相信,我他妈用手动配置,每次都有各种问题,解决起来烦死人,使用CocoaPods配置,可能会报一个错(linker command failed with exit code 1 (use -v to see invocation)),但是,很好解决,只需要找

iOS核心笔记—MapKit框架-基础

1.MapKit框架简介: ?了解:MapKit框架使用须知:①.MapKit框架中所有的数据类型的前缀都是MK:②.需要导入#import <MapKit/MapKit.h>头文件:③.MapKit框架中有一个非常重要的UI控件:MKMapView,专门用于地图显示,例如:大头针.路线.覆盖层展示等(着重界面展示). 1-1.地图设置: 1-1-1.设置地图显示类型: 地图类型: 地图枚举 地图类型 MKMapTypeStandard 普通地图 MKMapTypeSatellite 卫星云图

《Motion Design for iOS》(三十一)

创建Jeff Broderick的地图动画 在本指南的前面,我提到了一些Jeff Broderick设计并发布到Dribbble的很棒的动画. 如我所说,这里有一些不懂得动画.首先,当地图的图标被点击时,应用的主界面(包括导航栏)同时有不透明度和比例的动画来让其淡出到黑色的背景中并且有一点点缩小.同时,地图伴随着不透明度和比例的动画显著地显现到界面的前面来.地图还会向屏幕上方移动一点,就像过度动画一样.地图图标会保持在原位. 在我们编码重现Jeff的动画前,先看一眼我们创建的最终的动画效果. 我

iOS:实现MKAnnotation协议,在地图上设置大头针,点击显示具体的位置信息

如何添加大头针(地标): 通过MapView的addAnnotation方法可以添加一个大头针到地图上 通过MapView的addAnnotations方法可以添加多个大头针到地图上 –(void)addAnnotation:(id <MKAnnotation>)annotation; 说明:需要传入一个遵守了MKAnnotation协议的对象 基本步骤为: <1>新建一个遵守MKAnnotation协议的类: @interface MyAnnotation : NSObject