测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2017年10月 |
SwiftSwift 版本 | 4.0 |
SPM支持 SPM | ✗ |
由 Hypercubesoft 维护。
HCMapInfoView 是一个辅助库,它便于创建苹果地图的自定义信息视图。它还简化了创建大头针(标记视图)的过程。
CocoaPods 是 Objective-C 和 Swift 的依赖项管理器,它可以自动化并简化使用像 HCMapInfoView 这样的第三方库的过程。
要使用 CocoaPods 将 HCMapInfoView 集成到您的 Xcode 项目中,请在 Podfile 中指定它
target '<TargetName>' do
use_frameworks!
pod 'HCMapInfoView'
end
然后,运行以下命令
$ pod install
如果您不希望使用 CocoaPods 作为依赖项管理器,可以手动将 HCMapInfoView 集成到您的项目中。只需下载存储库并将 Source/HCMapInfoView 文件夹包含在您的项目中。
使用此库包括几个基本步骤
通过 CocoaPods 或手动将 HCMapInfoView 库添加到您的项目中。
如果您已经使用 Podfile 安装了此库,请使用指令将 HCMapInfoView 库包含在您的项目中
import HCMapInfoView
将 MKMapKit 添加到所需位置。
将 MKMapKit 放入您的 .storyboard 或 .xib 文件中,并在适当的文件中为该 MKMapKit 实例创建输出。
@IBOutlet weak var mapView: MKMapView!
您也可以以编程方式添加 MKMapKit 实例。
准备自定义信息视图
执行此步骤意味着创建自定义信息视图,当用户在地图上选择一个标记时应该显示这些视图。在这方面,您必须
在地图上添加标记。
如果您只想在地图上添加一个简单的标记,它可以显示简单的叫出,则没有任何问题。但如果您想显示带有自定义信息视图的简单或自定义注释标记,您需要使用 HCAnnotation 而不是基本的 MKPointAnnotation。您还可以从 HCAnnotation 派生出自定义功能。以下是如何创建简单的 HCAnnotation 并将其添加到地图的示例
mapView.addAnnotation(MKPointAnnotation(title: "School", subtitle: "Business school", coordinate: CLLocationCoordinate2D(latitude: 20.0, longitude: 100.0)))
实现 MKMapViewDelegate 方法并为每个标记(MKAnnotationView)创建视图
为了在地图上显示引脚并显示针对这些引脚的定制信息视图,您需要实现基本的MKMapViewDelegate方法。对于创建可显示自定义信息视图的引脚,您只需实现创建标注视图的MKMapViewDelegate方法。
如果您想要创建一个仅显示简单呼出信息的简单引脚,您可以使用HCPinAnnotationView类及其hcCreateDefaultPin静态方法作为创建的快捷方式,如下所示示例代码
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
{
///...
return HCPinAnnotationView.hcCreateDefaultPin(forMap: mapView, forAnnotation: annotation, withReuseIdentifier: "BasicMapPin")
///...
}
如果您需要创建一个可以显示自定义信息视图的简单引脚,您可以使用相同的方法,但需要额外的参数来定义自定义地图信息视图的类和nib名称,如下所示示例代码
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
{
//...
return HCPinAnnotationView.hcCreateDefaultPin(forMap: mapView, forAnnotation: annotation, withPinColor: UIColor.hcColorWithHex("389E13"), withReuseIdentifier: "GreenMapPin", withClass: MapInfoGreenView.self, mapInfoViewName: "MapInfoGreenView", showInfoViewHandler: {infoView in
if let greenView = infoView as? MapInfoGreenView
{
greenView.update(withAnnotation: singleAnnotation)
}
})
//...
}
此外,如果您想显示具有自定义图片的引脚,该引脚可以显示呼出信息但不能显示自定义信息视图,您可以使用HCAnnotationView类及其静态hcCreatePin方法,如下所示示例代码
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
{
//...
return HCAnnotationView.hcCreatePin(forMap: mapView, forAnnotation: annotation, withPinImage:#imageLiteral(resourceName: "blueMapPin"), withReuseIdentifier:"AnimalMapPin")
//...
}
最后,如果您想要显示具有自定义图片的引脚,该引脚可以显示自定义信息视图,您可以使用相同的方法,但需要额外的参数来定义自定义地图信息视图的类和nib名称,如下所示示例代码
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
{
//...
return HCAnnotationView.hcCreatePin(forMap: mapView, forAnnotation: annotation, withPinImage:#imageLiteral(resourceName: "blueMapPin"), withReuseIdentifier:"AnimalMapPin", withClass: MapInfoAnimalView.self, mapInfoViewName: "MapInfoAnimalView", showInfoViewHandler: {infoView in
if let blueView = infoView as? MapInfoAnimalView
{
blueView.update(withAnimal: animal)
}
})
//...
}
在任何情况下,您都可以从该存储库下载并运行HCMapInfoView Sample项目。在这个项目中,有一个示例用法,您可以从中了解如何使用此库。此外,此库中的每个属性和方法都有很好的文档,因此您将理解每个类、扩展、属性、方法或方法参数的含义和目的。
为了更好地理解如何使用此库,以下是基本HCMapInfoView方法的简要概述。在众多方法中,此库最重要的方法是
/// Create default map pin, i.e. MKPinAnnotationView instance
///
/// - Parameters:
/// - map: Reference to MKMapView instance where the pin has to be placed.
/// - annotation: Annotation for which we need to create pin.
/// - pinColor: Pin color. The default value is red color (default system color).
/// - reuseIdentifier: Reuse identifier for annotation view.
/// - showCallout: Defines if callout or custom info view should be shown when annotation view is selected.
/// - mapInfoViewClass: Class which defines HCMapInfoView subclass for custom map info view.
/// - mapInfoViewNibName: Nib name for custom map info view.
/// - infoViewSize: Desired size for info view. If not defined, the view will use its size from the nib file.
/// - showInfoViewHandler: Handler for showing info view. The intention is to use this handler to update the generated view with desired data.
/// - Returns: Default pin, i.e. HCPinAnnotationView instance.
static func hcCreateDefaultPin<T:HCMapInfoView>(forMap map:MKMapView, forAnnotation annotation:MKAnnotation, withPinColor pinColor:UIColor? = nil, withReuseIdentifier reuseIdentifier:String, showCallout:Bool = true, withClass mapInfoViewClass:T.Type? = nil, mapInfoViewName mapInfoViewNibName:String? = nil, infoViewSize:CGSize? = nil, showInfoViewHandler:ShowInfoViewCompletionHandler? = nil) -> HCPinAnnotationView?
/// Create custom map pin (annotation view)
///
/// - Parameters:
/// - map: Reference to MKMapView instance where the pin has to be placed.
/// - annotation: Annotation for which we need to create pin.
/// - pinImage: Pin image. If this parameter is not provided, default system pin will be used.
/// - pinCenterOffset: Position offset for custom pin (annotation view).
/// - reuseIdentifier: Reuse identifier for annotation view.
/// - showCallout: Defines if callout or custom info view should be shown when annotation view is selected.
/// - mapInfoViewClass: Class which defines HCMapInfoView subclass for custom map info view
/// - mapInfoViewNibName: Nib name for custom map info view.
/// - infoViewSize: Desired size for info view. If not defined, the view will use its size from the nib file.
/// - showInfoViewHandler: Handler for showing info view. The intention is to use this handler to update the generated view with desired data.
/// - Returns: Custom pin, i.e. custom map annotation (HCAnnotationView instance).
static func hcCreatePin<T:HCMapInfoView>(forMap map:MKMapView, forAnnotation annotation:MKAnnotation, withPinImage pinImage:UIImage? = nil, pinCenterOffset:CGPoint? = nil, withReuseIdentifier reuseIdentifier:String, showCallout:Bool = true, withClass mapInfoViewClass:T.Type? = nil, mapInfoViewName mapInfoViewNibName:String? = nil, infoViewSize:CGSize? = nil, showInfoViewHandler:ShowInfoViewCompletionHandler? = nil) -> HCAnnotationView?
如果未按照实现步骤操作,即如果您尝试基于此库自行实现,可能无法使用大部分功能,因为此库中的自定义类互相依赖。
如果发现任何bug,请报告,我们将尽快修复。也欢迎提出建议。
HCMapInfoView由Hypercube拥有和维护。