我想根据路线方向旋转标记图像。我已经使用 Map box SDK 实现了 map 。坐标和方向是通过网络服务获取的。
我尝试了 imageForMarker 但它没有用。实现如下
func mapView(_ mapView: MGLMapView, imageFor annotation: MGLAnnotation) -> MGLAnnotationImage? {
let img = imageRotatedByDegrees(oldImage: UIImage(named: "car")!, deg: CGFloat(self.bearing))
return MGLAnnotationImage(image: img, reuseIdentifier: "car")
}
func imageRotatedByDegrees(oldImage: UIImage, deg degrees: CGFloat) -> UIImage
{
let size = oldImage.size
UIGraphicsBeginImageContext(size)
let bitmap: CGContext = UIGraphicsGetCurrentContext()!
//Move the origin to the middle of the image so we will rotate and scale around the center.
bitmap.translateBy(x: size.width / 2, y: size.height / 2)
//Rotate the image context
bitmap.rotate(by: (degrees * CGFloat(Double.pi / 180)))
//Now, draw the rotated/scaled image into the context
bitmap.scaleBy(x: 1.0, y: -1.0)
let origin = CGPoint(x: -size.width / 2, y: -size.width / 2)
bitmap.draw(oldImage.cgImage!, in: CGRect(origin: origin, size: size))
let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage
}
Best Answer-推荐答案 strong>
尝试使用自定义重用标识符,如下所示:
func mapView(_ mapView: MGLMapView, imageFor annotation: MGLAnnotation) -> MGLAnnotationImage? {
let annotation = annotation as! CustomMapAnnotation
var annotationImage = mapView.dequeueReusableAnnotationImage(withIdentifier: annotation.id)
if annotationImage == nil {
var image = UIImage(named: "taxi")!
if let heading = annotation.heading {
image = image.imageRotatedByDegrees(degrees: heading)
}
image = image.withAlignmentRectInsets(UIEdgeInsets(top: 0, left: 0, bottom: image.size.height/2, right: 0))
annotationImage = MGLAnnotationImage(image: image, reuseIdentifier: annotation.id)
}
return annotationImage
}
关于ios - 如何在 Mapbox 3.6 中旋转汽车标记图像?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/45907301/
|