xamarin iOS:使用叠加层映射快照图像

时间:2016-03-10 23:04:20

标签: ios xcode xamarin mkmapview overlays

我正在保存图片快照,但我的叠加层没有保存。

是否可以使用地图快照保存叠加层?我有两点之间的路线,也有一些图像。

每次移动地图区域时都会保存地图,以便我知道叠加层已经渲染(我可以在屏幕上看到它们):

    private void SetMapCenter()
    {
        if (Map.Overlays.Count() > 0)
            _mapHelper.SetMapSnapshpot(Map);
    }

    public void SetMapSnapshpot(MKMapView map)
    {
        using (var snapShotOptions = new MKMapSnapshotOptions())
        {
            snapShotOptions.Region = map.Region;
            snapShotOptions.Scale = UIScreen.MainScreen.Scale;
            snapShotOptions.Size = map.Frame.Size;

            using (var snapShot = new MKMapSnapshotter(snapShotOptions))
            {
                snapShot.Start((snapshot, error) =>
                {
                    if (error == null)
                    {
                        snapshot.Image.SaveToPhotosAlbum(
                            (uiimage, imgError) =>
                        {
                            if (imgError == null)
                            {
                                new UIAlertView("Image Saved", "Map View Image Saved!", null, "OK", null).Show();
                            }
                        });
                    }
                });
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

不幸的是你必须自己在结果图像上绘制它们:

  

快照图片不包含应用添加到地图视图的任何自定义叠加层或注释。如果您希望在最终图像上显示注释和叠加层,则必须自己绘制它们。要在图像上正确放置这些项目,请使用此类的pointForCoordinate:方法将叠加或注释坐标值转换为图像坐标空间内的适当位置。

参考:https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKMapSnapshot_class/index.html#//apple_ref/doc/uid/TP40013271

  

请注意

     

Snapshotter对象捕获应用创建的任何叠加层或注释的可视化表示。如果希望这些项目出现在最终快照中,则必须在生成的快照图像上绘制它们。有关在地图快照上绘制自定义内容的详细信息,请参阅MKMapSnapshot类参考。

参考:https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKMapSnapshotter_class/index.html

我使用这个博客文章示例(ObjC)在C#中构建我自己的文件:

有关示例,请参阅Drawing Annotations on Map View Snapshot部分及其下方部分,并根据您在保存的地图图片中实际需要包含的内容进行转换:

http://nshipster.com/mktileoverlay-mkmapsnapshotter-mkdirections/