【发布时间】:2016-06-16 01:44:13
【问题描述】:
我的 swift ios 应用程序中有一张地图,里面有很多标记。因此我决定使用从这里获取的标记聚类:https://github.com/ribl/FBAnnotationClusteringSwift
在我的应用程序中实现它后,我看到了引脚和集群,这很酷。
我就是这样做的——首先我调用我的网络服务并获取每个引脚的所有数据并将其放入数组中:
func fetchRequests(radius: Double, lat: Double, lon: Double, completionHandler: (() -> Void)?){
Alamofire.request(.GET, "http://mywebservice.com/fetchdata", parameters: ["param": "1"])
.responseJSON { response in
switch response.result {
case .Success:
self.array.removeAll()
if let jsonData = response.result.value as? [[String: AnyObject]] {
for requestJSON in jsonData {
if let request = SingleRequest.fromJSON(JSON(requestJSON)){
let pinOne = FBAnnotation()
pinOne.coordinate = CLLocationCoordinate2D(latitude: request.latitude, longitude: request.longitude)
pinOne.title = request.title
pinOne.subtitle = request.discipline
self.array.append(pinOne)
}
}
}
self.clusteringManager.setAnnotations(self.array)
completionHandler!()
case .Failure(let error):
print("SWITCH ERROR")
print(error)
}
}
}
然后我实际上是从上面调用函数并做:
let annotationArray = self?.clusteringManager.clusteredAnnotationsWithinMapRect(self!.mapView.visibleMapRect, withZoomScale:scale)
self?.clusteringManager.displayAnnotations(annotationArray!, onMapView:(self?.mapView)!)
最后我将数据放在地图上,同时检查每个引脚是集群还是普通引脚:
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! {
var reuseId = ""
if annotation.isKindOfClass(FBAnnotationCluster) {
reuseId = "Cluster"
var clusterView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId)
clusterView = FBAnnotationClusterView(annotation: annotation, reuseIdentifier: reuseId, options: nil)
return clusterView
} else {
reuseId = "Pin"
var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView
pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
pinView!.calloutOffset = CGPoint(x: -5, y: 5)
pinView!.canShowCallout = true
pinView!.rightCalloutAccessoryView = UIButton(type: .DetailDisclosure) as UIView
return pinView
}
}
到目前为止一切顺利。它按预期工作,单击每个引脚后,我看到上面的弹出窗口带有title 和subtitle。但我想达到不同的效果。
当用户点击一个大头针时——而不是它上方的弹出窗口——一些方形组件会出现在地图下方。我一直在寻找一些类似的解决方案来给你举个例子,我在名为 Periscope 的应用程序中找到了它 - 这是他们的地图在用户点击任何事件之前的样子:
这就是点击地图上任意点后发生的事情:
当用户滚动地图时,这个组件当然会消失。
这在Swift 中可以实现吗?
【问题讨论】:
标签: swift mkmapview mapkit mkannotation mkpinannotationview