내 문제는이 하나와 비슷합니다. Displaying custom multiple pins shows wrong pins for locations 약간 다르지만 스위프트에서 일하고 있습니다. 변환 후에도 문제를 해결할 수 없었습니다. 각각 다른 이미지로 된 특수 효과가 있습니다. 이미지는 번호가 매겨진 포인터입니다. 각 주석의 세부 사항은 plist에서 제공됩니다. 제목은 "1 주차장", "2 밀"등입니다. 나는 공간 앞에있는 부분을 가져와 png 이미지에 해당하는 번호를 얻습니다.재사용 후 주석 이미지가 변경됨
로딩시 모든 주석의 이미지가 정확합니다. 그 지역을 벗어나서 돌아 오면 서로 이미지가 서로 바뀔 수 있습니다. 재사용의 문제인 것 같지만 솔루션을 볼 수 없습니다. getMapAnnotations()가 viewdidload에서 호출됩니다.
func getMapAnnotations() -> [Stands] {
var annotations:Array = [Stands]()
print("ANNOTATIONS")
//load plist file
var stands: NSArray?
if let path = Bundle.main.path(forResource: "stands", ofType: "plist") {
stands = NSArray(contentsOfFile: path)
}
//iterate and create annotations
if let items = stands {
for item in items {
let lat = (item as AnyObject).value(forKey: "lat") as! Double
let long = (item as AnyObject).value(forKey: "long")as! Double
let annotation = Stands(latitude: lat, longitude: long)
let tit = (item as AnyObject).value(forKey: "title") as! String
let numb = (item as AnyObject).value(forKey: "no") as! Int
annotation.title = "\(numb) \(tit)"
annotation.no = numb
annotations.append(annotation)
}
}
return annotations
}
후 주석보기
func mapView(_ mapView: MKMapView!, viewFor annotation: MKAnnotation!) -> MKAnnotationView! {
let identifier = "Stand"
var imageI: String?
var imageAn: String?
imageI = annotation.title!
if annotation.isKind(of: Stands.self) {
print("ANNOTATION \(imageI!)")
if let range = imageI?.components(separatedBy: " ") {
var imageII = range[0]
imageAn = "\(imageII).png"
print (imageAn!)
}
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
if annotationView == nil {
annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
//
annotationView?.image = UIImage(named: imageAn!)
annotationView?.canShowCallout = true
annotationView?.layer.zPosition = -1
let btn = UIButton(type: .detailDisclosure)
annotationView?.rightCalloutAccessoryView = btn
} else {
annotationView!.annotation = annotation
}
return annotationView
}
return nil
}
동일한 작업을 수행하려는 사람 (예 : 번호가 매겨진 주석)의 경우 공격 라인이 변경되었습니다. 이 질문은 저에게 아이디어를주었습니다. http://stackoverflow.com/questions/9822756/replace-icon-pin-by-text-label-in-annotation 제목이있는 작은 직사각형 만들기 (숫자로만 작성)가 표시됩니다. – cpmac