拖动自定义注释视图

时间:2020-05-30 12:23:08

标签: swift mkmapview draggable mkannotation mkannotationview

我有自己的CoreData自定义Annotation类:

extension Annotation: MKAnnotation {

    public var coordinate: CLLocationCoordinate2D {
        let cllCoordinate = CLLocationCoordinate2D(latitude: self.latitude, longitude: self.longitude)
        return cllCoordinate
    }

    public var title: String? {
        return self.objectId
    }

    class func keyPathsForValuesAffectingCoordinate() -> Set<String> {
        return Set<String>([ #keyPath(latitude), #keyPath(longitude) ])
    }

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Annotation> {
        return NSFetchRequest<Annotation>(entityName: "Annotation")
    }

    @NSManaged public var latitude: Double
    @NSManaged public var longitude: Double
    @NSManaged public var dateTime: Date
    @NSManaged public var type: String
    @NSManaged public var objectId: String?

}

结合fetchedResultsController添加和删除注释可以很好地工作。但是现在想要将注释拖到另一个位置。但是,仅将isDraggable设置为true并不是全部。我找不到较新的说明如何将其集成。

这是我的viewFor方法:

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

    guard annotation is Annotation else { return nil }

    let identifier = "Annotation"
    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)

    if annotationView == nil {
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)
        annotationView?.isDraggable = true
        annotationView?.canShowCallout = true
    } else {
        annotationView!.annotation = annotation
    }

    let customAnno = annotation as! Annotation
    let image = UIImage(named: customAnno.type)
    annotationView!.image = image

    return annotationView
}

我还需要什么?我想按一下注释,保持按下状态并转到另一个位置,然后松开手指,注释就留在那里。

1 个答案:

答案 0 :(得分:1)

拖动时,需要更改基础注释的 match guess.cmp(&secret_number) { Ordering::Less => { println!("Too low!") // without semicolon ; } // without comma , Ordering::Greater => { println!("Too high!") } Ordering::Equal => { println!("You win!!!"); break; } } 。如果它是只读的,则不能这样做。因此,如果要使其可拖动,则必须为// Find the input element that saves the message to be posted document.querySelector("input[name='comment_text']").value='MESSAGE TO POST'; // find the submit button, enable it and click it const submitButton = document.querySelector("button[name='submit']"); submitButton.disabled = false; submitButton.click(); 属性设置一个setter:

coordinate