Xamarin.forms 是否可以将特定的Xamarin.IOS引用到Xamarin表单中

Xamarin.forms 是否可以将特定的Xamarin.IOS引用到Xamarin表单中,xamarin.forms,xamarin.ios,Xamarin.forms,Xamarin.ios,我们正在尝试组合Xamarin代码,一个是使用Xamarin表单非XAML创建的,另一个是纯Xamarin.IOS 我们查看了Xamarin.Essential库,它似乎没有CoreMotion.CMPedometer iOS,因为我们需要计算步数 是否可以在Xamarin表单中运行代码来处理特定的操作系统 谢谢是的,您需要使用依赖项服务 using System; using MyApplication.Interfaces; using UIKit; [assembly: Xamarin.

我们正在尝试组合Xamarin代码,一个是使用Xamarin表单非XAML创建的,另一个是纯Xamarin.IOS

我们查看了Xamarin.Essential库,它似乎没有CoreMotion.CMPedometer iOS,因为我们需要计算步数

是否可以在Xamarin表单中运行代码来处理特定的操作系统

谢谢

是的,您需要使用依赖项服务

using System;
using MyApplication.Interfaces;
using UIKit;

[assembly: Xamarin.Forms.Dependency(typeof(MyApplication.iOS.DeviceInfo))]
Namespace MyApplication.iOS
{
    public class DeviceInfo : IDeviceInfo
    {
        UIDevice _device;

        Public DeviceInfo()
        {
            _device = new UIDevice();
        }

        public string GetDeviceModel()
        {
            return _device.Model;
        }

        public string GetDeviceVersion()
        {
            return _device.SystemVersion;
        }
    }
}
所有的文件都可以在这里找到

这里显示了一个与设备信息相关的示例,由于简单的原因,该信息已被减少

首先,如果您没有使用shared,您可以在.NET standard/PCL项目中创建一个接口,也就是说,很可能就是这样

using System;

namespace MyApplication.Interfaces
{
    public interface IDeviceInfo
    {
        String GetDeviceModel();
        String GetDeviceVersion();
    }
}
然后在特定于平台的项目中,创建一个实现该接口的依赖项服务,并指示编译器将该类识别为依赖项服务

using System;
using MyApplication.Interfaces;
using UIKit;

[assembly: Xamarin.Forms.Dependency(typeof(MyApplication.iOS.DeviceInfo))]
Namespace MyApplication.iOS
{
    public class DeviceInfo : IDeviceInfo
    {
        UIDevice _device;

        Public DeviceInfo()
        {
            _device = new UIDevice();
        }

        public string GetDeviceModel()
        {
            return _device.Model;
        }

        public string GetDeviceVersion()
        {
            return _device.SystemVersion;
        }
    }
}
现在,从.NET标准/PCL项目中,您可以根据需要调用依赖项服务

var deviceModel = DependencyService.Get<IDeviceInfo>().GetDeviceModel();
以上是针对iOS的,这意味着您需要在Android和UWP或任何适用的应用程序中实现相同的概念


看看这是否对你有帮助。

我不完全清楚你想要实现什么。但这听起来似乎可以通过依赖注入来解决。在表单项目中定义一个接口,在iOS项目中注册一个特定的实现,如果您使用其他平台,请在那里制作假人,现在您可以在共享表单项目中获得并使用该实现。如果与视觉元素有关,请查看custom Renders.CoreMotion.CMPedometer类仅属于iOS实现,该类用于获取步长计算。这显然不是一个视觉元素。你认为依赖注入有可能吗?你没有给出很多关于你到底想做什么的信息,但是如果需要的话,你可以连接整个CoreMotion.CMPedometer,所以依赖注入最有可能解决你的问题