Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何在Apple Maps中以1:1的比例缩放图像_Swift_Uiimageview_Mapkit_Mkmapview_Scale - Fatal编程技术网

Swift 如何在Apple Maps中以1:1的比例缩放图像

Swift 如何在Apple Maps中以1:1的比例缩放图像,swift,uiimageview,mapkit,mkmapview,scale,Swift,Uiimageview,Mapkit,Mkmapview,Scale,我需要在Apple Maps中缩放图像/图标1:1。在Internet上找不到有关该主题的任何信息 想法是将一个简单的jpg作为UIImageView放置在MKMapView上。但是如果有别的办法,请告诉我 为了清楚起见,我需要将图像与地图的缩放级别联系起来。例如,显示对象,如猫;)或者地图上的一棵真正大小的树。在第一步,对象应该停留在屏幕的中间,这样我就可以旋转和重新排列下面的地图。稍后,我想将该对象固定到地图上。先生 您只需将UIImages拖动到情节提要上,设置图像的宽度或高度,然后将纵横

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

想法是将一个简单的
jpg
作为
UIImageView
放置在
MKMapView
上。但是如果有别的办法,请告诉我

为了清楚起见,我需要将图像与地图的缩放级别联系起来。例如,显示对象,如猫;)或者地图上的一棵真正大小的树。在第一步,对象应该停留在屏幕的中间,这样我就可以旋转和重新排列下面的地图。稍后,我想将该对象固定到地图上。

先生

您只需将UIImages拖动到情节提要上,设置图像的宽度或高度,然后将纵横比设置为1:1 (只需按控制按钮并将线条从图像视图拖到图像视图,然后按option以禁用该选项)

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


祝你有愉快的一天

我终于想出了这样的主意:

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设置为方便

您能否澄清您的问题并添加一些当前尝试的代码片段?如果没有更多的信息,很难说出你想要达到的目标。请提供更多的信息,例如。。。您的意思是将图像添加到地图视图,使其保留纵横比吗?图片是否需要绑定到地图上的某个位置?抱歉有点误导。我需要将图像与地图的缩放级别相关联。。。将更新我的问题您可以根据地图视图上的缩放级别显示图像检查该页面