MapKit教程:如何在Swift中将地图添加到iOS应用程序

将地图添加到iOS应用程序是一个广泛传播的功能。地图使移动应用更具互动性,并极大地改善了用户体验。在这个MapKit教程中,我们描述了使用MapKit的经验,以帮助您学习如何在Swift中将地图添加到您的iOS应用程序

1.简介

您是否曾想在手机应用程序中构建地图?这项任务似乎太难了吗?如果是这样,那么这篇文章适合你。今天,我们将讨论MapKit。

那么,MapKit究竟是什么?它是一个基于Apple Maps的数据和API构建的有用框架,可帮助iOS开发人员在iPhone应用程序中轻松显示地图。

我们需要注意的MapKit最重要的特性是MKMapView类 - UIView的子类此类具有所需的所有功能,例如地图,卫星甚至当前位置。可以在屏幕上使用手势来改变地理区域。真是太棒了吧?!但这还不是全部。

我们还可以地图添加注释照片标题和标记特定位置另一个好处是我们可以通过MKMapViewDelegate协议接收通知,例如更改用户当前位置或地图的区域今天,我们将学习如何做到这一点。现在,让我们开始使用这个广泛的MapKit教程。

2.权限和当前位置

通常,我们会为您准备一个入门项目。但是谈论它并不多,所以我们实际上会从头到尾编写代码。希望这将是读者追随的另一个激励因素。

第1步:将Map Kit视图从库拖到屏幕。

通过使用Interface Builder,将Map Kit View对象拖到故事板上。为简单起见,您可以将其固定在屏幕的边缘(或安全区域(如果您参考此处))(当然,通过使用自动布局约束)。

第2步:在View Controller中创建一个管理MapKitView的IBOutlet

接下来我们需要做的是将IBOutlet连接从屏幕上的Map Kit视图拖到UIViewController。不要忘记导入MapKit库,以便代码成功编译。

 

BOOM,它看起来很棒,对吧?MapKit为我们提供了地图,现在我们需要做的就是观察和处理不同的事件,例如更改当前位置或地区等。

然而,在完成所有这些之前,我们首先需要做一件重要的事情:我们必须获得访问用户位置的权限。当然,如果你不这样做,你的应用程序仍然有效,地图仍然正常显示。但您必须这样做,因为位置信息是属于用户的私人信息之一。我们必须在获得之前询问他们的权限。如果您未能首先获得权限,则可能会导致应用程序崩溃。

Info.plist文件中,我们添加了一个像这样的新项:

在描述部分中,您必须向用户解释您需要其权限的原因。我们的“用于你的目的”(让我们试着说一些说服他们接受的东西)。

第3步:检查位置服务。

首先,我们将创建一个名为locationManager的变量

 let locationManager = CLLocationManager()

然后,在viewDidLoad()中,我们有:

if CLLocationManager.locationServicesEnabled(){
   //继续在这里实施
} else {
   //做一些让用户知道为什么需要打开它的东西。
}

locationServicesEnabled功能用于检查用户是否已接通他们的位置服务或不(在所示设置在iPhone)。如果有,我们可以继续实施我们的代码。否则,我们需要做一些事情让用户知道他们为什么需要打开它(比如发送弹出窗口来通知用户)。

第4步:检查位置授权状态

为此,我们将创建一个函数,例如:

func checkAuthorizationStatus(){
  switch CLLocationManager.authorizationStatus(){
    case.authorizedWhenInUse:break
    case.denied:break
    case .notDetermined:break
    case .restricted:break
    case.authorizedAlways:break
  }
}

我们创建了一个名为checkAuthorizationStatus()的函数,基本上它将检查授权状态是什么。我们需要处理五种情况:

  • authorizedWhenInUse:应用程序被授权获取用户位置的唯一时间是应用程序打开时。
  • authorizedAlways:这意味着应用程序可以随时在后台获取您的位置。这是地图应用程序,这个应用程序总是需要你的位置,当你在某个地方获得方向或你走动。
  • notDetermined:第一次弹出显示时,他们没有选择允许或不允许,所以这取决于你需要相应处理的项目。

对于剩下的两个案例,您需要根据具体情况向用户发送通知,例如用户未授予显示其位置的权限。在本文中,我们不会关注这些情况,但是,当您处理实际项目时,您还需要处理这些情况。它们和前两个一样重要

在本文中,出于教育目的,我们只处理第一种情况(authorizedWhenInUse)。所以,继续 - 我们将编写这行Swift代码:

mapView.showsUserLocation = true


此代码将显示用户的当前位置。总之,所有代码行如下所示:
 
override func viewDidLoad(){
  super.viewDidLoad()
  checkLocationServices()
}
func checkLocationServices(){
  if CLLocationManager.locationServicesEnabled(){
    checkLocationAuthorization()
  } else {
    //显示警告,让用户知道他们必须打开它。
  }
}
func checkLocationAuthorization(){
  switch CLLocationManager.authorizationStatus(){
  case.authorizedWhenInUse:
    mapView.showsUserLocation = true
   case .denied://显示警告告诉用户如何打开权限
   break
  case .notDetermined:
    locationManager.requestWhenInUseAuthorization()
    mapView.showsUserLocation = true
  case .restricted://显示警告,让他们知道发生了什么
   break
  case.authorizedAlways:
   break
  }
}
现在,让我们构建并再次运行Xcode项目。BOOM,它显示了当前的位置。请记住,您可以模拟iOS模拟器中的任何位置。

所以,你现在怎么想?这真的很酷,对吧?!只需少量代码就可以获得很多功能。但是,这甚至都不是全部。在下一节中,我们将向您展示MapKit的一个有趣功能,我们相信您会非常喜欢它。那是在地图上显示任意位置列表。完全理解MapKit教程后,您将能够构建自己的Store Locator应用程序。

3.在地图上显示地点列表

让我们构建一个功能,在地图上显示体育场列表。以下是我们如何在Swift中快速实现这一目标。

第1步:创建Model对象

让我们为体育场创建一个模型对象

struct Stadium {
  var name:String
  var lattitude:CLLocationDegrees
  var longtitude:CLLocationDegrees
}
接下来,让我们在viewDidLoad()中创建一个英格兰体育场的硬编码列表这些是我们想要在地图上绘制的体育场:
let stadiums = [Stadium(name: “Emirates Stadium”, lattitude: 51.5549, longtitude: -0.108436),
Stadium(name: “Stamford Bridge”, lattitude: 51.4816, longtitude: -0.191034),
Stadium(name: “White Hart Lane”, lattitude: 51.6033, longtitude: -0.065684),
Stadium(name: “Olympic Stadium”, lattitude: 51.5383, longtitude: -0.016587),
Stadium(name: “Old Trafford”, lattitude: 53.4631, longtitude: -2.29139),
Stadium(name: “Anfield”, lattitude: 53.4308, longtitude: -2.96096)]

第2步:将体育场添加到地图中。

这在Swift中非常容易。MapKit可以在地图上添加地点,例如微风:

func fetchStadiumsOnMap(_ stadiums: [Stadium]) {
  for stadium in stadiums {
    let annotations = MKPointAnnotation()
    annotations.title = stadium.name
    annotations.coordinate = CLLocationCoordinate2D(latitude: 
      stadium.lattitude, longitude: stadium.longtitude)
    mapView.addAnnotation(annotations)
  }
}

它看起来很简单,对吧?对于列表中的每个体育场,我们创建了一个MKPointAnnotation实例。MKPointAnnotation类可以帮助我们创建绑在地图上指定点的对象。接下来,我们将体育场的名称和坐标分配给该对象。之后,我们将其添加到地图视图中

完成所有操作后,我们在viewDidLoad中调用此函数,其中包含已创建的体育场列表。让我们运行并构建Xcode项目:

override func viewDidLoad() {
  super.viewDidLoad()
  checkLocationServices()
  fetchStadiumsOnMap(stadiums)
}

作为旁注,例如,如果您的地方离英格兰很远,则无法在手机上看到这些地方。因此,您需要放大地图,然后滑到英格兰。然后你会看到像这样的精确点:

4.总结

本文基本上指导您如何创建地图,询问用户访问其位置的权限,并使用MKMapView显示当前的地理位置它还向您展示了如何在地图上提取地点列表。

我们希望通过本文,您现在有信心创建一个简单的地图,并将更多功能集成到您的移动应用程序中。我们希望你会喜欢这篇文章。这是完整的Swift源代码请分享这篇文章,以帮助我们通过这个非常棒的MapKit教程吸引更多开发人员。快乐的编码!

 

 

posted @ 2019-05-14 17:07  张小根  阅读(542)  评论(0编辑  收藏  举报