openGlサーフェスを設定する前に、自分のアプリが実行されているiPadのバージョンを判断する必要があります。MonotouchでのiPad生成の検索
古いiPad 1で動作している場合は、アンチエイリアスを有効にするには時間がかかりすぎますが、iPad 2 + 3ではパフォーマンス上の問題はないはずですので、まずこれを検出する必要があります。
Monotouchを使用してiPad世代を検出する方法に関するアイデアはありますか?
openGlサーフェスを設定する前に、自分のアプリが実行されているiPadのバージョンを判断する必要があります。MonotouchでのiPad生成の検索
古いiPad 1で動作している場合は、アンチエイリアスを有効にするには時間がかかりすぎますが、iPad 2 + 3ではパフォーマンス上の問題はないはずですので、まずこれを検出する必要があります。
Monotouchを使用してiPad世代を検出する方法に関するアイデアはありますか?
ありがとうJoachim、あなたのヒントは私が物理的な1〜3世代のiPadsでテストした次の解決策につながりました。また、他の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;
}
P/Invokeを使用してsysctlbyname
にハードウェアバージョンを見つけることができます。
少し複雑ですが、利用可能なコードat Xamarin's Wikiを使用し、iPad2(iPad2,1)以上で自分自身を拡張することをおすすめします。おそらくまたあなたの変更でwikiを更新してください:)