好的,我的新任务是这样的:在跟踪器应用程序中我有一张地图,我试图用自定义标题箭头进行注释。我需要将此箭头旋转到一定角度。
我拥有所有数据(即dergrees和位置)和此方法:
headingImageView?.transform = CGAffineTransform(rotationAngle: CGFloat(rotationAngle))
所以我试过了:
使用
创建注释let annotation = UserAnnotation(coordinate: locations.last!.coordinate)
mapView.addAnnotation(annotation)
符合MKMapViewDelegate
协议
extension TrackViewController: MKMapViewDelegate
实施: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
}
}
所以它有点工作,但我需要每次更新位置时旋转图像。我该怎么办?任何建议将不胜感激
答案 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)
好吧,现在我做到了:
全球声明的箭头图像和可选的注释
let arrow = #imageLiteral(resourceName: "arrow")
var rotatedArrow: UIImage?
var oldAnnotation: MKPointAnnotation?
当我得到这个角度时,将图像旋转到一定角度
rotatedArrow = arrow.imageRotated(by: CGFloat(locations.last!.course))
将此旋转的图像传递给代理的方法
annotationView.image = rotatedArrow
return annotationView
存储并删除以前的注释
但这一切看起来都太丑了