обнаружение iPhone 4 ... на симуляторе - PullRequest
0 голосов
/ 05 июля 2010

Мне нужно определить, использует ли пользователь iPhone 4, но мне нужно, чтобы он работал на симуляторе (потому что Apple забыла мою страну, и в скором времени здесь не будет никаких признаков iPhone 4).это http://www.clintharris.net/2009/iphone-model-via-sysctlbyname/

, но при запуске на симуляторе он не определяет правильную версию.Я имею в виду, Xcode 3.2.3 имеет два симулятора (3G / 3GS и 4).Я ожидал, что метод обнаружения скажет мне правильную версию, которую я использую ... но вместо этого он говорит мне "симулятор iphone" ...

Есть ли способ сделать это?спасибо.

Ответы [ 6 ]

4 голосов
/ 05 июля 2010

Вам не нужно определять версию системы в вашем случае.

Предположим, что изображение называется foo.png, тогда вам просто нужно добавить

  • foo~ipad.png для iPad
  • foo@2x~iphone.png для iPhone 4

и загрузите изображение с помощью [UIImage imageNamed:@"foo.png"]. Подробнее см. Руководство по программированию приложений iPhone .

1 голос
/ 05 июля 2010

Доступность и состояние оборудования

Если на устройстве недоступна аппаратная функция (например, гироскоп), вызов метода запуска, связанный с этой функцией, не имеетэффект.Вы можете узнать, доступна ли аппаратная функция или активна, проверив соответствующее свойство;например, для данных гироскопа вы можете проверить значение свойств gyroAvailable или gyroActive.

Используйте

@property(readonly, nonatomic, getter=isGyroAvailable) BOOL gyroAvailable

класса CMMotionManager .

1 голос
/ 05 июля 2010

Я думаю, что было бы лучше проверить нужную вам функцию, а не конкретное устройство.Это, безусловно, то, что Apple рекомендует, поскольку она дает вам страховку, когда появляются новые устройства!

В этом случае сработает ли проверка размера экрана и используйте его для определения необходимости масштабированияизображение?

[[UIScreen mainScreen] bounds]
0 голосов
/ 05 июля 2010

от Эрики Судан:

- (NSString *) platform
{
  size_t size;
  sysctlbyname("hw.machine", NULL, &size, NULL, 0);
  char *machine = malloc(size);
  sysctlbyname("hw.machine", machine, &size, NULL, 0);
  /*
  Possible values:
  "iPhone1,1" = iPhone 1G
  "iPhone1,2" = iPhone 3G
  "iPhone2,1" = iPhone 3GS
  "iPhone3,1" = iPhone 4
  "iPod1,1"   = iPod touch 1G
  "iPod2,1"   = iPod touch 2G
  */
  NSString *platform = [NSString stringWithCString:machine];

  free(machine);
  return platform;
}

Или, если вам просто нужно определить, является ли это экраном высокого разрешения, вы можете использовать:

UIScreen *screen = [UIScreen mainScreen];
BOOL isHighRes;

if ([screen respondsToSelector:@selector(scale)]) {
    isHighRes = ([screen scale] > 1);
} else {
    isHighRes = NO;
}
0 голосов
/ 05 июля 2010

См

@property (nonatomic, readonly, retain) NSString *systemVersion;
//  It equal to @"4.0" on iOS 4.0

и

@property (nonatomic, readonly, retain) NSString *model;
// Possible examples of model strings are @”iPhone” and @”iPod touch”

класса UIDevice .

0 голосов
/ 05 июля 2010

Майк, ты можешь узнать, использует ли пользователь iPhone 4, используя инструкции препроцессора. Например:

#ifdef __IPHONE_4_0
   // Do some work for iPhone 4 device
#else
   // Do some work for non iPhone 4 device
#endif

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...