gpt4 book ai didi

ios - 使用 Mapbox 更改 map 上的注释图像

转载 作者:行者123 更新时间:2023-11-28 15:36:41 25 4
gpt4 key购买 nike

在我的应用程序中,我需要有四个不同的注释图像来表示不同的位置类型。我已经浏览并找到了有关此主题的一些信息,但与 Mapbox 无关。

目前,用户可以过滤不同类型的位置。这是因为在我的数据库中,注释在 Firebase 中按类型区分。 .类型:1 = 滑板场,类型:2 = 街头滑冰等

通过阅读有关堆栈溢出的信息,我相信我需要创建一个自定义注释,我已经这样做了。

class SkateAnnotation: MGLPointAnnotation {

var canEdit = false
var id: String!
var type: SkateType!

}

并且我已将该类型应用于我的注释。

  func addAnnotation(park: Skatepark) {

let point = SkateAnnotation()

point.coordinate = park.coordinate

point.title = park.name

point.id = park.id

point.subtitle = park.subtitle

point.canEdit = park.editable

point.type = park.type

mapView.addAnnotation(point)

mapView.selectAnnotation(point, animated: true)

}

唯一让我感到困惑的部分是将这些类型应用于不同的图像。目前我的代码看起来像这样,它只将一个图像应用于所有注释。

    func mapView(_ mapView: MGLMapView, imageFor annotation: MGLAnnotation) -> MGLAnnotationImage? {




// return nil

var annotationImage = mapView.dequeueReusableAnnotationImage(withIdentifier: "SkateAnnotation1")

if annotationImage == nil {

var image = UIImage(named: "SkateAnnotation1")!




image = image.withAlignmentRectInsets(UIEdgeInsets(top: 0, left: 0, bottom: image.size.height / 2, right: 0))

annotationImage = MGLAnnotationImage(image: image, reuseIdentifier: "SkateAnnotation1")



}

return annotationImage

}

}

是否有人能够帮助将图像设置为按类型注释?

我的过滤器注释代码:

  func sideBarDidSelectButtonAtIndex(_ index: Int) {

mapView.removeAnnotations(mapView.annotations!)

for park in skateparks {

if index == 0 {
addAnnotation(park: park)


}

if index == 1 && park.type == .park {
addAnnotation(park: park)


}

if index == 2 && park.type == .street {
addAnnotation(park: park)

}

//Change this to feature the users own personal spots they saved to firebase

if index == 3 && park.type == .own {
addAnnotation(park: park)

}


}

}

最佳答案

在我的应用程序中,我有两个不同的注释,每个注释都有不同的图像:- CameraNotation 和 NoteAnnotation。我为每个子类 MGLAnnotation 是这样的:

// MGLAnnotation protocol reimplementation
class NoteAnnotation: NSObject, MGLAnnotation {

// As a reimplementation of the MGLAnnotation protocol, we have to add mutable coordinate and (sub)title properties ourselves.
var coordinate: CLLocationCoordinate2D
var title: String?
var subtitle: String?

// Custom properties that we will use to customize the annotation.
var image: UIImage?
var reuseIdentifier: String?
var uuid: String?

init(coordinate: CLLocationCoordinate2D, title: String?, subtitle: String?) {
self.coordinate = coordinate
self.title = title
self.subtitle = subtitle

self.reuseIdentifier = "noteAnnotation"
}
}

注意 reuseIdentifier。为每种注释类型设置一个新的注释类型。然后在您的 viewController 中,您可以像这样检查每个:

func mapView(_ mapView: MGLMapView, viewFor annotation: MGLAnnotation) -> MGLAnnotationView? {
// We're not concerned with the user annotation.
guard annotation is CameraAnnotation || annotation is NoteAnnotation else {
return nil
}

// For better performance, reuse existing annotations. To use multiple different annotation views, change the reuse identifier for each.
if annotation is CameraAnnotation {
if let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "cameraAnnotation") {
return annotationView
} else {
return DraggableAnnotationView(reuseIdentifier: "cameraAnnotation", size: CGSize(width: 39, height: 39), annotation: annotation)
}
} else if annotation is NoteAnnotation {
if let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "noteAnnotation") {
return annotationView
} else {
return DraggableAnnotationView(reuseIdentifier: "noteAnnotation", size: CGSize(width: 39, height: 39), annotation: annotation)
}
} else {
return DraggableAnnotationView(reuseIdentifier: "draggablePoint", size: CGSize(width: 39, height: 39), annotation: annotation)
}
}

我的点是可拖动的,因此调用了 DraggableAnnotationView,但您可以按照自己的方式进行。希望这会有所帮助。

关于ios - 使用 Mapbox 更改 map 上的注释图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44216733/

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