我想根据路线方向旋转标记图像。我已经使用Map box SDK实现了地图。坐标&方向是通过webservice获取的。 我试过imageForMarker,但它没有奏效。 Implemetation是使用自定义的重用标识符遵循如何在Mapbox 3.6中旋转汽车标记图像?
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
}
如果此注释离开屏幕,则返回它总是会面向相同的方向。如果该值以某种方式得到更新,则不会。对于OP跟踪当前用户位置的情况,这可能不起作用。似乎每次都需要使用独特的MGLAnnotationImage,或者至少将可能的标题分解为间隔(例如30或15度),并且对于每个可能的间隔具有单个重用标识符。标题可能不准确,但足够接近。我会选择15或30,因为这样你就会达到所有四个主要方向。 –