如何绘制“旋转”箭头作为注释?

时间:2018-04-10 20:58:21

标签: swift mapkit

好的,我的新任务是这样的:在跟踪器应用程序中我有一张地图,我试图用自定义标题箭头进行注释。我需要将此箭头旋转到一定角度。

我拥有所有数据(即dergrees和位置)和此方法:

headingImageView?.transform = CGAffineTransform(rotationAngle: CGFloat(rotationAngle))

所以我试过了:

  1. 使用

    创建注释
    let annotation = UserAnnotation(coordinate: locations.last!.coordinate)
    mapView.addAnnotation(annotation)
    
  2. 符合MKMapViewDelegate协议

    extension TrackViewController: MKMapViewDelegate 
    
  3. 实施:viewFor::rendererFor:

    等方法
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    
    if !overlay.isKind(of: MKPolyline.classForCoder()) {
    
        return MKPolylineRenderer(overlay: overlay)
    
    }
    
    let polyline = overlay as! MKPolyline
    let renderer = MKPolylineRenderer(polyline: polyline)
    renderer.strokeColor = .blue
    renderer.lineWidth = 3
    
    return renderer
    

    }

    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    
         if annotation is UserAnnotation {
    
            let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "Online")
            annotationView.image = UIImage(named: "arrow")
    
            return annotationView
    
         }
    }
    
  4. 所以它有点工作,但我需要每次更新位置时旋转图像。我该怎么办?任何建议将不胜感激

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码:

但这很重要,要知道您必须为rotationAngle输入(弧度)

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

 if annotation is UserAnnotation {

    let annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: "Online")
    annotationView.image = UIImage(named: "arrow")
    annotationView.transform = CGAffineTransform(rotationAngle: CGFloat(//what you want with type of radian))
    return annotationView
 }

}

答案 1 :(得分:0)

好吧,现在我做到了:

  1. 全球声明的箭头图像和可选的注释

    let arrow = #imageLiteral(resourceName: "arrow")
    var rotatedArrow: UIImage?
    var oldAnnotation: MKPointAnnotation?
    
  2. 当我得到这个角度时,将图像旋转到一定角度

    rotatedArrow = arrow.imageRotated(by: CGFloat(locations.last!.course))
    
  3. 将此旋转的图像传递给代理的方法

    annotationView.image = rotatedArrow
    
    return annotationView
    
  4. 存储并删除以前的注释

  5. 但这一切看起来都太丑了