gpt4 book ai didi

ios - 如何在 Swift 2 中创建图像叠加层并添加到 MKMapView?

转载 作者:搜寻专家 更新时间:2023-10-30 22:11:34 25 4
gpt4 key购买 nike

我正在尝试学习 MapKit,现在正尝试添加一个图像(不是多边形、圆形、矩形等) 作为 map View 的叠加层。我似乎找不到任何示例代码来帮助解释如何执行此操作。

到目前为止,我在 ViewController.swift 中的代码是:

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

@IBOutlet var mapView: MKMapView!

var locationManager: CLLocationManager!
var mapOverlay: MKOverlay!

override func viewDidLoad() {
super.viewDidLoad()

//Setup our Location Manager
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()

//Setup our Map View
mapView.delegate = self
mapView.mapType = MKMapType.Satellite
mapView.showsUserLocation = true
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

}

我知道我需要使用:

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer

和 drawMapRect 函数,但我不知道要在其中放入什么。此外,如果所有代码都在 ViewController.swift 中,这将很有用

我只需要一个叠加层,所以不需要上课。我需要它是一个图像叠加层(以便它可以调整大小),而不是注释。我还尝试按照 http://www.raywenderlich.com/30001/overlay-images-and-overlay-views-with-mapkit-tutorial 上的教程进行操作但是没有包含所有代码的部分,我发现很难跟上。你们能帮我如何创建image MKOverlays 并将它们添加到 MKMapKit 吗?

提前致谢...

最佳答案

swift 3

以下在 Swift 3 中对我有用。

class ImageOverlay : NSObject, MKOverlay {

let image:UIImage
let boundingMapRect: MKMapRect
let coordinate:CLLocationCoordinate2D

init(image: UIImage, rect: MKMapRect) {
self.image = image
self.boundingMapRect = rect
self.coordinate = rect.centerCoordinate
}
}

class ImageOverlayRenderer : MKOverlayRenderer {

override func draw(_ mapRect: MKMapRect, zoomScale: MKZoomScale, in context: CGContext) {

guard let overlay = self.overlay as? ImageOverlay else {
return
}

let rect = self.rect(for: overlay.boundingMapRect)

UIGraphicsPushContext(context)
overlay.image.draw(in: rect)
UIGraphicsPopContext()
}
}

然后像往常一样,在您的 MapView 委托(delegate)中:

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {

if overlay is ImageOverlay {
return ImageOverlayRenderer(overlay: overlay)
}
...
}

每当您需要向 map 添加图像时:

let overlay = ImageOverlay(image: myImage, rect: desiredLocationAsMapRect)
mapView.add(overlay)

请注意,我始终确保矩形与图像具有相同的纵横比。否则,我怀疑会导致图像失真。

关于ios - 如何在 Swift 2 中创建图像叠加层并添加到 MKMapView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34857515/

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