【问题标题】:How to Scale a Image 1:1 in Apple Maps如何在 Apple 地图中 1:1 缩放图像
【发布时间】:2019-11-25 09:34:26
【问题描述】:

我需要在 Apple 地图中缩放图像/图标 1:1。在 Internet 上找不到有关该主题的任何信息。

想法是在MKMapView 上放置一个简单的jpg 作为UIImageView。但如果有其他方法请告诉我

为了清楚起见,我需要将图像与地图的缩放级别相关联。例如,在地图上显示像猫这样的对象;) 或树的实际大小。第一步,对象应该停留在屏幕中间,这样我就可以旋转和重新排列位于下方的地图。稍后点赞将对象固定到地图上。

【问题讨论】:

  • 你能澄清你的问题并添加一些你当前尝试的代码sn-ps吗?如果没有更多信息,很难说出您想要实现的目标
  • 请提供更多信息,例如... 您的意思是向地图视图添加图像以使其保留其纵横比吗?图片是否需要与地图上的某个位置相关联?

标签: swift uiimageview mapkit mkmapview scale


【解决方案1】:

我终于想到了这样的东西:

class MapViewController: UIViewController {

    @IBOutlet weak var mapView: MKMapView!

    override func viewDidLoad() {
        super.viewDidLoad()        
        mapView.delegate = self

        draw()
    }

    func draw() {

        let region = mapView.region
        let center = region.center

        let pointsPerMeter = MKMapPointsPerMeterAtLatitude(center.latitude)

        // Real-World-Object with 24 Meters length and 4 Meters width
        let objectLength = pointsPerMeter*24
        let objectWidth = pointsPerMeter*4
        let mapSize = MKMapSize.init(width: objectLength, height: objectWidth)
        let mapPoint = MKMapPoint.init(center)
        let objectRect = MKMapRect.init(origin: mapPoint, size: mapSize)

        // clear the map
        mapView.removeOverlays(mapView.overlays)

        // create image overlay from Real-World-Object
        let objectOverlay = ImageOverlay(image: UIImage(named: "nameOfYourImageAsset")!, rect: objectRect.offsetBy(dx: -objectLength/2 , dy: -objectWidth/2))

        // add overlay to map
        mapView.addOverlay(objectOverlay)

    }

}

// found here https://stackoverflow.com/a/45989625/10878331
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.origin.coordinate
    }
}

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.region 具有有效值。

代码仍在进行中。我将尝试在地图顶部放置一个简单的 UIImage,希望可以将其放入地图的上下文中。我想我需要设置 mapView.isZoomEnabled = false 方便

【讨论】:

    【解决方案2】:

    先生

    你可以简单地将 UIImage 拖到你的情节提要中并为你的图像设置宽度或高度,然后设置纵横比 1:1 (只需按下控制按钮并将线从图像视图拖到图像视图,然后按选项即可选择该选项)

    或者你可以通过编程来实现

    祝你有美好的一天

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多