सबसे पहले, आपको नई स्क्रीन फिट करने के लिए अपने सभी विचारों का पुनर्निर्माण नहीं करना चाहिए, न ही विभिन्न स्क्रीन आकारों के लिए अलग-अलग विचारों का उपयोग करना चाहिए।
IOS के ऑटो-आकार बदलने की क्षमताओं का उपयोग करें , ताकि आपके विचार किसी भी स्क्रीन आकार को समायोजित और अनुकूलित कर सकें।
यह बहुत कठिन नहीं है, इसके बारे में कुछ प्रलेखन पढ़ें । इससे आपका काफी समय बचेगा।
iOS 6 भी इस बारे में नई सुविधाएँ प्रदान करता है। Apple डेवलपर वेबसाइट पर iOS 6 API चैंज को
जरूर पढ़ें ।
और नए iOS 6 जाँच autolayout क्षमताओं।
उस ने कहा, अगर आपको वास्तव में iPhone 5 का पता लगाने की आवश्यकता है, तो आप बस स्क्रीन के आकार पर भरोसा कर सकते हैं ।
[ [ UIScreen mainScreen ] bounds ].size.height
IPhone 5 की स्क्रीन की ऊंचाई 568 है।
आप इन सभी को सरल बनाने के लिए एक मैक्रो की कल्पना कर सकते हैं:
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
fabs
Epsilon के साथ प्रयोग यहाँ है, जब वे H2CO3 द्वारा टिप्पणियों में बताए गए अनुसार फ्लोटिंग पॉइंट्स की तुलना करते हुए सटीक त्रुटियों को रोकते हैं।
तो अब से आप इसे मानक में उपयोग कर सकते हैं यदि / और कथन:
if( IS_IPHONE_5 )
{}
else
{}
संपादित करें - बेहतर पहचान
जैसा कि कुछ लोगों द्वारा कहा गया है, यह केवल एक वाइडस्क्रीन का पता लगाता है , वास्तविक आईफोन 5 नहीं।
IPod टच के अगले संस्करणों में भी शायद ऐसी स्क्रीन होगी, इसलिए हम मैक्रोज़ के किसी अन्य सेट का उपयोग कर सकते हैं।
मूल मैक्रो का नाम बदलें IS_WIDESCREEN
:
#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
और चलो मॉडल का पता लगाने मैक्रो जोड़ें:
#define IS_IPHONE ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPhone" ] )
#define IS_IPOD ( [ [ [ UIDevice currentDevice ] model ] isEqualToString: @"iPod touch" ] )
इस तरह, हम सुनिश्चित कर सकते हैं कि हमारे पास एक iPhone मॉडल और एक वाइडस्क्रीन है, और हम IS_IPHONE_5
मैक्रो को फिर से परिभाषित कर सकते हैं :
#define IS_IPHONE_5 ( IS_IPHONE && IS_WIDESCREEN )
यह भी ध्यान रखें कि, @ LearnCocos2D द्वारा कहा गया है, यह मैक्रोज़ काम नहीं करेगा यदि एप्लिकेशन को iPhone 5 स्क्रीन के लिए ऑप्टिमाइज़ नहीं किया गया है (Default-568h@2x.png इमेज को मिस करना), क्योंकि स्क्रीन का आकार अभी भी 320x480 होगा मामला।
मुझे नहीं लगता कि यह एक मुद्दा हो सकता है, क्योंकि मैं यह नहीं देखता कि हम एक गैर-अनुकूलित ऐप में एक iPhone 5 का पता क्यों लगाना चाहते हैं।
महत्वपूर्ण - iOS 8 सपोर्ट
IOS 8 पर, क्लास की bounds
प्रॉपर्टी UIScreen
अब डिवाइस ओरिएंटेशन को दर्शाती है ।
तो जाहिर है, पिछले कोड बॉक्स से बाहर काम नहीं करेगा।
इसे ठीक करने के लिए, आप नई nativeBounds
संपत्ति का उपयोग कर सकते हैं, इसके बजाय bounds
, यह अभिविन्यास के साथ नहीं बदलेगा, और जैसा कि यह एक चित्र-अप मोड पर आधारित है।
ध्यान दें कि आयामों को nativeBounds
पिक्सेल में मापा जाता है, इसलिए iPhone 5 के लिए 568 के बजाय ऊंचाई 1136 होगी ।
यदि आप 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 */
}
आप पिछले मैक्रोज़ को निम्न तरीके से अनुकूलित कर सकते हैं:
#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 )
और जाहिर है, अगर आपको आईफोन 6 या 6 प्लस का पता लगाने की आवश्यकता है, तो संबंधित स्क्रीन आकारों का उपयोग करें।