gpt4 book ai didi

iOS 开发 : Using a custom image for the user annotation in MapBox

转载 作者:行者123 更新时间:2023-11-28 11:46:37 26 4
gpt4 key购买 nike

我是 IOS 开发的新手,所以其中一些内容看起来很明显。我试过结合 customize the user annotation 的示例和 marking a place on the map with an image

我觉得我需要添加以下代码行并以某种方式将此代码附加到第一个链接中描述的用户注释,但我不知道如何执行此操作。我猜想我也可以将其中一些函数插入到 customUserLocationAnnotationView 中,但是没有明显的指示说明将其放置在该类中的什么位置。

func mapView(_ mapView: MGLMapView, imageFor annotation: MGLAnnotation) -> MGLAnnotationImage? {
var annotationImage = mapView.dequeueReusableAnnotationImage(withIdentifier: "pisa")

if annotationImage == nil {
var image = UIImage(named: "pisavector")!
image = image.withAlignmentRectInsets(UIEdgeInsets(top: 0, left: 0, bottom: image.size.height/2, right: 0))
annotationImage = MGLAnnotationImage(image: image, reuseIdentifier: "pisa")
}
return annotationImage
}

func mapView(_ mapView: MGLMapView, annotationCanShowCallout annotation: MGLAnnotation) -> Bool {
return true
}

编辑

我不只是想把图像放在这样的随机位置

enter image description here

我想让图片以用户标注为中心,当用户移动时,图片也会跟着移动,如下图

enter image description here

作为旁注

我也收到错误“无法呈现和更新 ViewController (BYZ-38-tOr) 的自动自动布局状态:代理崩溃了 Main.storyboard”,但我认为这不重要,因为我的程序仍然在模拟器上构建和运行良好。

最佳答案

override func viewDidLoad() {
super.viewDidLoad()
let mapView = MGLMapView(frame: view.bounds)
mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
mapView.delegate = self

mapView.userTrackingMode = .followWithHeading
mapView.showsUserHeadingIndicator = true
view.addSubview(mapView)
}

func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? {
// Substitute our custom view for the user location annotation. This custom view is defined below.
if annotation is MGLUserLocation && mapView.userLocation != nil {
return CustomUserLocationAnnotationView()
}
return nil
}

// Create a subclass of MGLUserLocationAnnotationView.
class CustomUserLocationAnnotationView: MGLUserLocationAnnotationView {
...
}

看看这个例子:https://www.mapbox.com/ios-sdk/maps/examples/user-location-annotation/

CustomUserLocationAnnotationView 中有一个名为setupLayers 的方法。变量 dot 是一个 CALayer,因此您可以将 UIImage 添加到 CALayer。更改 private func setupLayers() 中的代码,如下所示:

dot = CALayer()
let myImage = UIImage(named: "star")?.cgImage
dot.contents = myImage
layer.addSublayer(dot)

关于iOS 开发 : Using a custom image for the user annotation in MapBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52510763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com