2017-02-02 4 views
0

내 문제는이 하나와 비슷합니다. 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 
    } 

답변

0

내가 뭘하는지 아는 것보다 시행 착오에 의한 솔루션, 이상을 발견 한 것 같다. ? (! : imageAn 이름) 내가 주석이 디스플레이에 대한 정보와 좌표, 타이틀 및 자막의 정보입니다 제대로 이해한다면

}else{ 
annotationView?.image = UIImage(named: imageAn!) 
annotationView.annotation = annotation 
} 

를 만들기 위해 나는 이 annotationView 이미지입니다 =있는 UIImage했다. AnnotationView는 주석을 표시하는 방법을 설정합니다. 핀 또는 사용자 지정 이미지 사용. AnnotationView가 nill 인 경우 주석 뷰가 올바르게 작성됩니다. 주석이 보이지 않고 다시 돌아 오면 AnnotationView는 무효가 아니므로 시스템이 무작위로보기를 가져 와서 표시합니다. annotationView? .image = UIImage (이름 : imageAn!)를 추가하면 올바른 이미지가 표시됩니다. 이 스키마가 올바르지 않으면 누군가가 나를 고쳐 줄 것이라고 확신합니다.

+0

동일한 작업을 수행하려는 사람 (예 : 번호가 매겨진 주석)의 경우 공격 라인이 변경되었습니다. 이 질문은 저에게 아이디어를주었습니다. http://stackoverflow.com/questions/9822756/replace-icon-pin-by-text-label-in-annotation 제목이있는 작은 직사각형 만들기 (숫자로만 작성)가 표시됩니다. – cpmac