代码之家  ›  专栏  ›  技术社区  ›  Barney Chambers

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

  •  3
  • Barney Chambers  · 技术社区  · 9 年前

    我正在写一个Xamarin表单项目,如下 this 创建自定义地图的教程。我收到一个错误:

    The name "Runtime" does not exist in the current context

    Runtime System 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;
            }
        }
    }
    
    1 回复  |  直到 9 年前
        1
  •  3
  •   SushiHangover    9 年前

    GetNSObject 存在于 ObjCRuntime 命名空间:

    ObjCRuntime.Runtime.GetNSObject(....
    

    关于 MonoTouch.ObjCRuntime.Runtime.GetNSObject Method