c# - Xamarin Forms iOS - 当前上下文中不存在运行时

标签 c# ios xamarin xamarin.ios xamarin.forms

我正在编写 Xamarin Forms 项目,关注 this创建自定义 map 的教程。我收到一个错误:

名称“Runtime”在当前上下文中不存在

据我所知,RuntimeSystem 库的一部分,如 here 所述,并且我在我的代码中 using System 所以我不确定为什么我会看到这个错误。这是我的代码:

using System;
using System.Collections.Generic;
using System.Runtime;
using CoreGraphics;
using CoreLocation;
using CustomRenderer;
using CustomRenderer.iOS;
using MapKit;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Maps;
using Xamarin.Forms.Maps.iOS;
using Xamarin.Forms.Platform.iOS;
using Google.Maps;

[assembly: ExportRenderer(typeof(CustomMap), typeof(CustomMapRenderer))]
namespace CustomRenderer.iOS
{
    public class CustomMapRenderer : MapRenderer
    {
        MKPolygonRenderer polygonRenderer;

        protected override void OnElementChanged(ElementChangedEventArgs<View> e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null)
            {
                // Unsubscribe from event handlers
                var nativeMap = Control as MKMapView;
                if (nativeMap != null)
                {
                    nativeMap.RemoveOverlays(nativeMap.Overlays);
                    nativeMap.OverlayRenderer = null;
                    polygonRenderer = null;
                }
            }

            if (e.NewElement != null)
            {
                var formsMap = (CustomMap)e.NewElement;
                var nativeMap = Control as MKMapView;

                nativeMap.OverlayRenderer = GetOverlayRenderer;

                CLLocationCoordinate2D[] coords = new CLLocationCoordinate2D[formsMap.ShapeCoordinates.Count];

                int index = 0;
                foreach (var position in formsMap.ShapeCoordinates)
                {
                    coords[index] = new CLLocationCoordinate2D(position.Latitude, position.Longitude);
                    index++;
                }

                var blockOverlay = MKPolygon.FromCoordinates(coords);
                nativeMap.AddOverlay(blockOverlay);
            }
        }

        MKOverlayRenderer GetOverlayRenderer(MKMapView mapView, IMKOverlay overlayWrapper)
        {
            if (polygonRenderer == null && !Equals(overlayWrapper, null))
            {
                var overlay = Runtime.GetNSObject(overlayWrapper.Handle) as IMKOverlay;
                polygonRenderer = new MKPolygonRenderer(overlay as MKPolygon)
                {
                    FillColor = UIColor.Red,
                    StrokeColor = UIColor.Blue,
                    Alpha = 0.4f,
                    LineWidth = 9
                };
            }
            return polygonRenderer;
        }
    }
}

最佳答案

GetNSObject 存在于 ObjCRuntime 命名空间中:

ObjCRuntime.Runtime.GetNSObject(....

回复:MonoTouch.ObjCRuntime.Runtime.GetNSObject Method

关于c# - Xamarin Forms iOS - 当前上下文中不存在运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46086685/

相关文章:

ios - 如何在启动时自动导航到屏幕

c# - 如何在 Xamarin Forms 中点击 ViewCell 后刷新 TableView 数据?

c# - 在没有管理员权限的情况下以编程方式将文件移动到程序文件?

c# - 读取文件并将内容放入数组中

ios - 带有圆角和边框的 UIView 边缘颜色错误

ios - xamarin 构建在模拟器上通过但在真实设备上失败

ios - 无法在 iOS 上的 Azure NotificationHub 中注册设备,无回调

c# - 在代码优先 Entity Framework 中将外键包含在复合主键中

c# - 到达 ScrollViewer 的底部 - 最大 VerticalOffset 值低于 ScrollableHeight

ios - 初始 View 控件中的 PrepareforSegue