Как определить IOS 7 и IOS 8 и широкоформатные размеры iPhone, чтобы сделать мое приложение универсальным?

Я разрабатываю универсальное приложение IOS для всех устройств и IOS 7 и IOS 8. И у меня есть такие макросы:

Эти макросы предназначены для обнаружения широкоформатного iPhone 5, это работает для IOS 7:

#define IS_WIDESCREEN_IOS7 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON ) 

Эти макросы также предназначены для широкоэкранного iPone 5, но работают только для IOS 8:

 #define IS_WIDESCREEN_IOS8 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1136 ) < DBL_EPSILON ) 

Мне нужно объединить этот код, чтобы он работал как на IOS 7, так и на IOS 8, и для этого мне нужен селектор, который определяет версию IOS. Вот код:

 #define IS_WIDESCREEN_IOS7 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON ) #define IS_WIDESCREEN_IOS8 ( fabs( ( double )[ [ UIScreen mainScreen ] nativeBounds ].size.height - ( double )1136 ) < DBL_EPSILON ) #define IS_WIDESCREEN ( ( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) ? IS_WIDESCREEN_IOS8 : IS_WIDESCREEN_IOS7 ) 

то автор сообщения предлагает указать: «Если вы также нацеливаете iOS 7 или ниже, обязательно используйте обнаружение функций, так как вызов nativeBounds до iOS 8 приведет к сбою вашего приложения:» и дает следующий код:

 if( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) { /* Detect using nativeBounds - iOS 8 and greater */ } else { /* Detect using bounds - iOS 7 and lower */ } 

Пожалуйста, помогите мне здесь. Я начинающий разработчик и хочу понять, чтобы он работал. Где я должен поместить SKSpriteNode * background = [SKSpriteNode spriteNodeWithImageNamed: @ "Фон"] ;?

Весь этот код из разных сообщений в Stackoverflow, вот он: Как обнаружить iPhone 5 (широкоэкранные устройства)?

Я загрузил изображения, чтобы удалить окно, вот ссылка https://www.dropbox.com/sh/pnll2e2jvo0uigs/AACOLbzzQqZlJEZZcBx7TMR1a?dl=0 папка называется measureImages. вот код, который я использую для добавления фона: #import «GameScene.h»

 @implementation GameScene -(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"Background-568"]; background.anchorPoint = CGPointMake(0.5, 1); background.position = CGPointMake(self.size.width/2, self.size.height); [self addChild:background];} return self; } 

Если бы кто-то мог поставить полный код с помощью макросов и использования в ответ, я бы очень признателен.

Важное ОБНОВЛЕНИЕ: 12.17.2014

Эта проблема была решена путем включения правильных изображений запуска, и мое приложение запускалось в правильном разрешении, и я использовал границы экрана [то же, что и в ios7], как предложил Дайдж-Джан. Спасибо всем, кто попробовал или помог мне решить эту проблему, я лично хочу поблагодарить Дай-Джан и Ша за помощь и поддержку. Если вам нужен код для широкоэкранных iphones, я оставлю его в своем собственном ответе ниже, он будет работать на всех iPhone выше iPhone 4 и всех iPads.

6 Solutions collect form web for “Как определить IOS 7 и IOS 8 и широкоформатные размеры iPhone, чтобы сделать мое приложение универсальным?”

вам не нужно использовать специальные функции для определения ширины экрана.

просто включите правильные изображения запуска, и ваше приложение будет работать в правильном разрешении, и вы можете просто использовать границы экрана [такие же, как в ios7]

Я снова подчеркиваю: включите правильные изображения запуска! ТОГДА используйте UIScreen bounds

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/LaunchImages.html

Когда мне нужен быстрый и грязный способ обнаружения устройств iOS7 / 8 и iPhone / iPad, я буду использовать следующие макросы:

 #define IS_IOS8 ([[UIDevice currentDevice].systemVersion compare:@"8.0" options:NSNumericSearch] != NSOrderedAscending) #define IS_IPHONE ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) 

И вы можете использовать эти макросы:

 if (IS_IPHONE) { // iPhone specific code ... } else { // iPad specific code ... } if (IS_IOS8) { // Code specific to iOS8+ ... } else { // Code specific to earlier versions of iOS ... } 

ОБНОВЛЕНИЕ. Чтобы обнаружить широкоэкранные устройства, вы можете использовать следующий макрос (поскольку iOS8 UIScreen будет ориентирован на ориентацию, а высота будет отличаться в портретном / альбомном, так что вы можете проверить оба:

 #define IS_WIDESCREEN (( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON ) || ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.width - ( double )568 ) < DBL_EPSILON )) 

Использование Это очень полезно

 #define IS_IPHONE ((int)(MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)) == 480) #define IS_IPHONE5 ((int)(MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)) == 568) #define IS_IPHONE6 ((int)(MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)) == 667) #define IS_IPHONE6PLUS ((int)(MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)) == 736) 

Чтобы обнаружить версии iOS, вы можете использовать один из следующих макросов:

 #define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) #define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending) 

Пример:

 if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) { // code here } 

И для обнаружения типов iPhone вы можете использовать,

 CGSize applicationFrameSize = [UIScreen mainScreen].bounds.size; CGFloat maxHeight = (MAX(applicationFrameSize.width, applicationFrameSize.height)); _is4GDevice = (maxHeight == 480.0 || maxHeight == 480.0); _is5GDevice = (maxHeight == 568.0 || maxHeight == 568.0); _is6GDevice = (maxHeight == 667.0 || maxHeight == 667.0); _is6PlusDevice = (maxHeight == 736.0 || maxHeight == 736.0); 

Итак, спасение этой проблемы состоит в том, чтобы включить правильные изображения запуска в image.xcassets или LaunchImage.xib, а компилятор будет выбирать правильный размер экрана для ваших изображений, как Daij-Djan, упомянутый в приведенном выше ответе. Чтобы он работал для широкоэкранных iPhone и всех iPhone (4,4 и более) и iPads и IOS 7 и IOS 8. добавьте этот макрос в свой файл MyScene.m или только любой файл .m, где вы его используете.

  #define IS_WIDESCREEN_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON ) #define IS_WIDESCREEN_6 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )667 ) < DBL_EPSILON ) 

и использовать этот код для обнаружения широкоэкранных iPhones, это работает для всех устройств IOS и IOS 7 и IOS 8:

  -(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { SKSpriteNode *background; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { if (IS_WIDESCREEN_5) { //detects WIDESCREEN iPhone 5,5c,5s for both IOS 7,8 background= [SKSpriteNode spriteNodeWithImageNamed:@"Background-568"]; }else if (IS_WIDESCREEN_6){ //detects WIDESCREEN iPhone 6 for both IOS 7,8 background= [SKSpriteNode spriteNodeWithImageNamed:@"Background-667"]; }else{ //detects iPhone 4,4s,iPhone 6 Plus, for both IOS 7,8 background= [SKSpriteNode spriteNodeWithImageNamed:@"Background"]; } }else{ //detects iPads all sizes and resolutions (Ipad regular display and iPad retina display) background= [SKSpriteNode spriteNodeWithImageNamed:@"Background~iPad"]; } background.anchorPoint = CGPointMake(0.5, 1); background.position = CGPointMake(self.size.width/2, self.size.height); [self addChild:background]; } return self; } 

И последний шаг – назовите свои изображения таким образом: Background@2x.png для iPhone 4,4s, Background-568 @ 2x для широкоформатного iPhone 5,5c, 5s, Background-667@2x.png для широкоэкранного iPhone 6, background @ 3x .png для iPhone 6 Plus, Background ~ iPad.png для обычного дисплея iPad и, наконец, Background~iPad@2x.png для iPad Retina Display. Вы можете загрузить эти изображения, оптимизированные для определенных размеров экрана, из Dropbox. Вот ссылка https://www.dropbox.com/sh/pnll2e2jvo0uigs/AACOLbzzQqZlJEZZcBx7TMR1a?dl=0 и попробуйте. Последнее и самое главное – добавить изображения запуска для каждого размера экрана, иначе код не будет работать. Я надеюсь, что это поможет и благодарит вас, ребята, которые учат меня всему этому, я потерял 2 месяца, чтобы заставить его работать, потому что у меня была неправильная информация.

Он работает на 5c & 6 & 6plus. Он будет проверять, будет ли экран 16: 9. Я новый программист iOS, пожалуйста, сообщите

 bool IsTargetDeviceWideScreen() { double screenWidth = 0; double screenHeight = 0; if ( [ [ UIScreen mainScreen ] respondsToSelector: @selector( nativeBounds ) ] ) { CGSize screenSize = [ [ UIScreen mainScreen ] nativeBounds ].size; screenWidth = screenSize.width; screenHeight = screenSize.height; } else { CGSize screenSize = [ [ UIScreen mainScreen ] bounds ].size; screenWidth = screenSize.width; screenHeight = screenSize.height; } NSLog(@"screen size"); NSLog(@"%f", screenWidth); NSLog(@"%f", screenHeight); double rateWidthHeight = 0; if (screenWidth < screenHeight) { rateWidthHeight = (screenWidth * 16) / (screenHeight * 9); } else { rateWidthHeight = (screenWidth * 9) / (screenHeight * 16); } NSLog(@"%f", rateWidthHeight); if ( 0.99 < rateWidthHeight & rateWidthHeight < 1.01) { return true; } return false; } 
  • writeToFile атомарно возвращает NO
  • UITextField - сбой на делегатах, которые возвращают BOOL
  • iOS - получить NSDictionary из NSUserDefaults: попытался разыменовать недопустимый объект ObjC или отправить ему непризнанный селектор
  • Как изменить размер шрифта моего названия ячейки UITableView?
  • Является ли RESTKit хорошей заменой для ASIHTTPRequest?
  • Firebase Отправляет уведомление в пользовательский сегмент на iOS, не работающем
  • AFNetworking Ожидаемая ошибка типа содержимого
  • Как добавить Live Preview камеры в UIView
  • Клавиатура перемещается вверх и вниз со многими областями с uiTextfield
  • Поддерживаемые платформы, базовый SDK, встроенная настройка активной архитектуры, восстановленная после обновления pod
  • UIImagePickerController записывает видео с альбомной ориентацией
  • Interesting Posts

    Как передавать данные между телефонами через GKSession без использования GKPeerPicker

    Запросить пользователей по имени или адресу электронной почты с помощью Firebase (Swift)

    Добавить пользовательский плагин cordova в IBM Worklight 6.1

    CLLocationManager.location – nil

    Как я могу избавиться от предупреждения «Обновить в рекомендуемые настройки»?

    Как отобразить MKPinAnnotationView на MKMapview в быстром

    Import .ics Файл и показать в календаре или UITableView

    Как протестировать EDGE или GPRS или любую другую медленную / плохую сеть

    iOS – Ошибка Linker после обновления до Xcode 4.5, возможно, связанного с Core Plot

    LLVM ERROR: обнаружена неисправная функция, компиляция отменена

    Установить выбранную ячейку по умолчанию в UITableViewController

    Имя несистемного шрифта в iPhone

    Отрегулируйте высоту UILabel в зависимости от текста

    Выражение не является целым постоянным выражением в iOS

    Попытка понять TranslationInView

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.