gpt4 book ai didi

ios - MKPinAnnotationView 不显示标题

转载 作者:行者123 更新时间:2023-11-29 00:32:58 28 4
gpt4 key购买 nike

我过去有过使用 MKMapViewMKPointAnnotation 的经验,我用它们在 map 上放置了一些图钉。这次我尝试更进一步,使用 MKPinAnnotationView 来编写标签和一些引脚。

不幸的是,它并没有按照我的预期工作。

这是我想做的:

我有一个 map (一个 MKMapView 对象),当我触摸它时,我在触摸点上放置了一个图钉,然后执行一些计算,这给了我 map 上的第二个点。我放置了第二个引脚(位于第二个点),在最后一个引脚上我想放置一个标签,说“Hello Second!”。

相关代码如下:

class ViewController: UIViewController, MKMapViewDelegate {
var mapView:MKMapView!, touchPoint,secondPoint:MKPointAnnotation!

override func viewDidLoad() {
super.viewDidLoad()
mapView = MKMapView()
...........
let mapTap = UITapGestureRecognizer(target: self,
action: #selector(ViewController.mapTouchHandler))
mapView.addGestureRecognizer(mapTap)
}


func mapTouchHandler(gesture:UITapGestureRecognizer) {
...........
// Compute map coordinates for the touch point (tapGeoPoint).

if touchPoint == nil {
touchPoint = MKPointAnnotation()
mapView.addAnnotation(touchPoint);
}

touchPoint.coordinate = CLLocationCoordinate2D(latitude: tapGeoPoint.latitude,
longitude: tapGeoPoint.longitude)
...........
computeSecondPoint(url: someComputedURL)
}


func computeSecondPoint(url searchURL:String) {
let reqURL = NSURL(string: searchURL)!, session = URLSession.shared,
task = session.dataTask(with: reqURL as URL) {
(data: Data?, response: URLResponse?, error: Error?) in
if error == nil {
do {let allData = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSArray
.................
// Compute map coordinates for the second point (secondPointCoord).

if self.secondPoint == nil {
self.secondPoint = MKPointAnnotation()
self.mapView.addAnnotation(self.secondPoint)
}

DispatchQueue.main.async {
() -> Void in
self.secondPoint.coordinate = CLLocationCoordinate2D(latitude: secondPointCoord.latitude,
longitude: secondPointCoord.longitude)
self.secondPoint.title = "Hello Second!"
}
} catch let error as NSError {print(error.localizedDescription)}
} else {
print("Error inside \(#function):\n\(error)")
}
}

task.resume()

}


func mapView(_ mapView: MKMapView,
viewFor annotation: MKAnnotation) -> MKAnnotationView? {
let identifier = "pin"
var view: MKPinAnnotationView
if let dequeuedView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
as? MKPinAnnotationView {
dequeuedView.annotation = annotation
view = dequeuedView
} else {
view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
view.canShowCallout = true
view.calloutOffset = CGPoint(x: -5, y: 0)
}
return view
}
}

现在发生的情况是,引脚按预期放置,但我在第二个引脚上没有看到任何标签。我还注意到,如果我点击第二个引脚所在的位置(在这种情况下,第二个引脚将保持在同一位置),则会出现标签(因为它应该始终如此)。如果我再次点击(不是那么近),标签就会再次消失(尽管不应该)。

我的代码(上面)有什么不正确的地方吗?任何相关提示将不胜感激。

最佳答案

你指的是标题

self.secondPoint.title = "Hello Second!"

是当您点击注释图钉时出现的标注 View 的标题。如果您想每次都显示标签和图钉图像,您可以将 MKAnnotationView 子类化并在自定义图钉 View 中添加标签。您可以通过以下方式自定义

class CustomAnnotationView : MKPinAnnotationView
{
let helloLabel:UILabel = UILabel.init(frame:CGRectMake(0, 0, 100, 40)) //your desired frame

func showLabel(title : String)
{
helloLabel.text = title
helloLabel.textAlignment = .Center
//set further properties
self.addSubview(helloLabel)
}

fun hideLabel() {
helloLabel.removeFromSuperview()
}
}

关于ios - MKPinAnnotationView 不显示标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41294892/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com