在Monotouch中寻找iPad生成

sin*_*sro 3 xamarin.ios ipad

在设置openGl曲面之前,我需要确定我的应用程序运行的iPad版本.

如果它在旧的iPad 1上运行,那么启用抗锯齿的速度太慢了,而在iPad 2 + 3上应该没有性能问题,所以我需要先检测一下.

有关如何使用Monotouch检测iPad生成的任何想法?

sin*_*sro 5

感谢Joachim,您的提示引导我使用以下解决方案,我已经在物理1 - 3代iPad上进行了测试,它还应该能够检测到其他Apple设备:

public enum HardwareVersion
{
        iPhone2G,
        iPhone3G,
        iPhone3Gs,
        iPhone4,
        iPod1G,
        iPod2G,
        iPod3G,
        Simulator,
        iPad1G,
        iPad2G,
        iPad3G,
        Unknown
}


[DllImport(MonoTouch.Constants.SystemLibrary)]
static internal extern int sysctlbyname ([MarshalAs(UnmanagedType.LPStr)] string property, IntPtr output, IntPtr oldLen, IntPtr newp, uint newlen);

public static HardwareVersion getHardwareVersion()
    {
        string HardwareProperty = "hw.machine";

        // get the length of the string that will be returned
        var pLen = Marshal.AllocHGlobal (sizeof(int));
        sysctlbyname (HardwareProperty, IntPtr.Zero, pLen, IntPtr.Zero, 0);

        var length = Marshal.ReadInt32 (pLen);

        // check to see if we got a length
        if (length == 0) {
                Marshal.FreeHGlobal (pLen);
                return HardwareVersion.Unknown;
        }

        // get the hardware string
        var pStr = Marshal.AllocHGlobal (length);
        sysctlbyname (HardwareProperty, pStr, pLen, IntPtr.Zero, 0);

        // convert the native string into a C# string
        var hardwareStr = Marshal.PtrToStringAnsi (pStr);
        var ret = HardwareVersion.Unknown;

        // determine which hardware we are running
        if (hardwareStr == "iPhone1,1")
                ret = HardwareVersion.iPhone2G; 
        else if (hardwareStr == "iPhone1,2")
                ret = HardwareVersion.iPhone3G; 
        else if (hardwareStr == "iPhone2,1")
                ret = HardwareVersion.iPhone3Gs; 
        else if (hardwareStr == "iPhone3,1")
                ret = HardwareVersion.iPhone4; 
        else if (hardwareStr == "iPod1,1")
                ret = HardwareVersion.iPod1G; 
        else if (hardwareStr == "iPod2,1")
                ret = HardwareVersion.iPod2G; 
        else if (hardwareStr == "iPod3,1")
                ret = HardwareVersion.iPod3G; 
        else if (hardwareStr == "iPad1,1")
                ret = HardwareVersion.iPad1G; 
        else if (hardwareStr == "iPad2,1")
                ret = HardwareVersion.iPad2G; 
        else if (hardwareStr == "iPad3,1")
                ret = HardwareVersion.iPad3G; 
        else if (hardwareStr == "i386" || hardwareStr == "x86_64"  || hardwareStr == "x86_32" )
                ret = HardwareVersion.Simulator;

        // cleanup
        Marshal.FreeHGlobal (pLen);
        Marshal.FreeHGlobal (pStr);

        return ret;
}
Run Code Online (Sandbox Code Playgroud)