将地图添加到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教程吸引更多开发人员。快乐的编码!