IPhone 5 स्क्रीन रिज़ॉल्यूशन के लिए ऐप्स कैसे विकसित या माइग्रेट करें?


495

नए iPhone 5 डिस्प्ले में एक नया पहलू अनुपात और एक नया रिज़ॉल्यूशन (640 x 1136 पिक्सेल) है।

नए स्क्रीन आकार के लिए पहले से मौजूद नए या संक्रमण को विकसित करने के लिए क्या आवश्यक है?

पुराने प्रदर्शनों और नए वाइडस्क्रीन पहलू अनुपात दोनों के लिए अनुप्रयोगों को "सार्वभौमिक" बनाने के लिए हमें क्या ध्यान में रखना चाहिए?

जवाबों:


481
  1. Xcode का नवीनतम संस्करण डाउनलोड और इंस्टॉल करें ।
  2. अपने ऐप के लिए एक लॉन्च स्क्रीन फ़ाइल सेट करें (आपकी लक्ष्य सेटिंग के सामान्य टैब में)। यह आपको किसी भी स्क्रीन के पूर्ण आकार का उपयोग करने के लिए मिलता है, जिसमें iOS 9 में iPad के विभाजन के आकार शामिल हैं।
  3. अपने ऐप का परीक्षण करें, और उम्मीद करें कि कुछ और न करें, क्योंकि अगर आपने ऑटो रिसाइज़िंग मास्क ठीक से सेट किया था या ऑटो लेआउट का इस्तेमाल किया था, तो सब कुछ जादुई तरीके से काम करना चाहिए।
  4. यदि आपने नहीं किया है, तो अपने दृश्य लेआउट को समायोजित करें, अधिमानतः ऑटो लेआउट के साथ।
  5. यदि विशेष रूप से बड़ी स्क्रीन के लिए आपको कुछ करना है, तो ऐसा लगता है कि आपको ऊंचाई की जांच करनी होगी [[UIScreen mainScreen] bounds]क्योंकि ऐसा लगता है कि इसके लिए कोई विशेष एपीआई नहीं है। IOS 8 के रूप में आकार वर्ग भी हैं जो स्क्रीन के आकार को नियमित या कॉम्पैक्ट रूप से लंबवत और क्षैतिज रूप से आकार देते हैं और आपके UI को अनुकूलित करने के लिए अनुशंसित तरीके हैं।

1
हो सकता है कि यह एक शूट-ए-मैसेंजर चीज हो। नया संकल्प और पहलू अनुपात? नया ऑटोरोटेशन? नहीं! वास्तव में, अधिक ऑटोरोटेशन नियंत्रण अच्छा हो सकता है।
रिदमिक फिस्टमैन

89
यह ध्यान देने योग्य है कि [UIImage imageNamed: @ "background.png"] अभी भी केवल "background.png" या "background@2x.png" को लोड करेगा, यह मौजूद होने पर "background-568h@2x.png" लोड नहीं करेगा। ।
टीवीन

1
क्या "Default-568h@2x.png" को जोड़ना पर्याप्त है या निर्माण सेटिंग्स में कोई अतिरिक्त विकल्प हैं जिन्हें हम समायोजित / समायोजित कर सकते हैं?
लुकाज़

3
@ लुकाज़ 1136 पीएक्स ऊंचाई का समर्थन करने के लिए यह पर्याप्त (और एकमात्र तरीका) है। अपने ऐप को सही ढंग से स्ट्रेच करें वर्थ आप अपने विचारों को कैसे सेट करते हैं, इस पर निर्भर करता है, लेकिन भले ही आपने सब कुछ हार्ड-कोड किया हो, ऑटोरेस्पोन्ग मास्क या ऑटोलयूट सेटअप करने के लिए यह बहुत काम नहीं होना चाहिए।
फिलिप रेडेलिक

1
@FilipRadelic - आपने जो संकल्प निर्दिष्ट किया है वह 1136 * 960 है, यह 1136 * 640 है .. ?? ..
NiKKi

117

यदि आपके पास iPhone 4S या उससे पहले के लिए कोई एप्लिकेशन बनाया गया है, तो वह iPhone 5 पर लेटरबॉक्स चलाएगा।

अपने ऐप को नई लम्बी स्क्रीन के अनुकूल बनाने के लिए, पहली चीज़ जो आप लॉन्च की गई छवि को बदलना चाहते हैं: Default-568h@2x.png। इसका आकार 1136x640 (HxW) होना चाहिए। हां, नए स्क्रीन आकार में डिफ़ॉल्ट छवि होने से आपके ऐप को नए iPhone 5 की स्क्रीन पर ले जाने की कुंजी है

(ध्यान दें कि नामकरण सम्मेलन केवल डिफ़ॉल्ट छवि के लिए काम करता है। किसी अन्य छवि का नाम "Image-568h@2x.png" रखने से यह "Image@2x.png" के स्थान पर लोड नहीं होगा। यदि आपको अपनी छवियों को लोड करने की आवश्यकता है। विभिन्न स्क्रीन आकारों के लिए, आपको इसे प्रोग्रामेटिक रूप से करना होगा।)

यदि आप बहुत भाग्यशाली हैं, तो यह हो सकता है ... लेकिन सभी संभावना में, आपको कुछ और कदम उठाने होंगे।

  • सुनिश्चित करें, अपने Xibs / Views खुद को आकार देने के लिए ऑटो-लेआउट का उपयोग करें।
  • दृश्यों का आकार बदलने के लिए स्प्रिंग्स और स्ट्रट्स का उपयोग करें।
  • यदि यह आपके ऐप के लिए पर्याप्त अच्छा नहीं है, तो अपने xib / स्टोरीबोर्ड को एक विशिष्ट स्क्रीन आकार के लिए डिज़ाइन करें और दूसरे के लिए प्रोग्रामेटिक रूप से रिपोजिशन करें।

चरम मामले में (जब उपरोक्त में से कोई भी नहीं होता है), दो Xibs को डिज़ाइन करें और व्यू कंट्रोलर में उपयुक्त एक को लोड करें।

स्क्रीन आकार का पता लगाने के लिए:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
{
    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
    }
}

हाय संजी, जैसा कि हमें यह पता लगाना है कि इसका आईफोन 5 है या इससे पहले, इसलिए सब कुछ तदनुसार बदलना होगा, जैसे कि मैं कहता हूं कि मेरे पास नेविगेशन बार और टैब्बर के साथ ऊंचाई 367 है, मुझे आईफोन 5 के लिए आकार बदलना होगा
राहेल सादिक

2
IPod टच के बारे में क्या? अगली iPhone पीढ़ी के बारे में क्या? स्क्रीन के आकार का उल्लेख किया जाना चाहिए, 3.5 इंच / 4 इंच नहीं iPhone / iPhone5
valexa

2
देखने के लिए एक अन्य गोष्ठा यह है कि viewDidLoad को आपके जिब के आकार बदलने से पहले कॉल किया जाता है, इसलिए यदि आप nib में चीजों के आधार पर कोई गणना कर रहे हैं तो इस बात से अवगत रहें कि स्थिति कैसे बदल सकती है (या viewWidAppear में गणना कहा है)।
केंडल हेल्मसटेटर गेलनर

30

केवल वास्तव में आवश्यक बात यह है कि ऐप संसाधनों के लिए "Default-568h@2x.png" नामक एक लॉन्च छवि को जोड़ना है, और सामान्य स्थिति में (यदि आप पर्याप्त भाग्यशाली हैं) तो ऐप सही ढंग से काम करेगा।

यदि एप्लिकेशन स्पर्श घटनाओं को नहीं संभालता है, तो सुनिश्चित करें कि कुंजी विंडो का आकार उचित है। समुचित फ्रेम सेट करने के लिए वर्कअराउंड है:

[window setFrame:[[UIScreen mainScreen] bounds]]

आईओएस 6 में माइग्रेट करते समय स्क्रीन के आकार से संबंधित अन्य मुद्दे नहीं हैं । विवरण के लिए आईओएस 6.0 रिलीज नोट्स पढ़ें ।


22

कभी-कभी (प्री-स्टोरीबोर्ड ऐप्स के लिए), यदि लेआउट पर्याप्त रूप से अलग होने वाला है, तो यह डिवाइस के अनुसार एक अलग xib को निर्दिष्ट करने के लायक है ( यह प्रश्न देखें - आपको iPhone 5 से निपटने के लिए कोड को संशोधित करने की आवश्यकता होगी) अगर आपको अलग-अलग ग्राफिक्स की जरूरत है तो ऑटिज़ाइजिंग मास्क के साथ ट्विड्लिंग की कोई राशि काम नहीं करेगी।

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    NSString *myNibName;
    if ([MyDeviceInfoUtility isiPhone5]) myNibName = @"MyNibIP5";
    else myNibName = @"MyNib";

    if ((self = [super initWithNibName:myNibName bundle:nibBundleOrNil])) {


...

यह उन ऐप्स के लिए उपयोगी है जो पुराने iOS संस्करणों को लक्षित कर रहे हैं।


+1 कुछ इस बारे में थका देने वाला है, हालाँकि, भविष्य की अनुकूलता है। वर्तमान में कोड का यह टुकड़ा सुरक्षित नहीं है क्योंकि यह केवल iPhone 5 डिवाइस को ध्यान में रखता है, स्क्रीन आकार के लिए एक चेक एक सुरक्षित विकल्प होगा।
स्टनर

यह सच है - यह उपयोगिता का हिस्सा हो सकता है जो डिवाइस के प्रकार को लौटाता है - यह केवल एक उदाहरण था कि विभिन्न निब का उपयोग कैसे करें, वास्तव में डिवाइस प्राप्त करने के बारे में नहीं।
सोमन मैन

20

यहाँ आप एक अच्छा ट्यूटोरियल पा सकते हैं (मोनो-टच के लिए, लेकिन आप गैर-मोनो-टच-प्रोजेक्ट्स के लिए भी जानकारी का उपयोग कर सकते हैं):
http://redth.info/get-your-monotouch-apps-ready-for-ipro-5 -ios-6-आज /

  1. अपनी डिफ़ॉल्ट / डिफ़ॉल्ट स्क्रीन ( 640 x 1136 पिक्सेल ) के लिए एक नई छवि बनाएं जिसका नाम " Default-568h@2x.pp " है।

  2. में आईओएस सिम्युलेटर , हार्डवेयर के लिए जाने -> उपकरण मेनू, और " iPhone (रेटिना 4 इंच) "

  3. अन्य छवियां बनाएं, जैसे पृष्ठभूमि छवियां

  4. अपनी नई छवियों को लोड करने के लिए iPhone 5 का पता लगाएं:

public static bool IsTall
{
    get {
        return UIDevice.currentDevice.userInterfaceIdiom
                    == UIUserInterfaceIdiomPhone
                && UIScreen.mainScreen.bounds.size.height
                    * UIScreen.mainScreen.scale >= 1136;
    }
}

private static string tallMagic = "-568h@2x";
public static UIImage FromBundle16x9(string path)
{
    //adopt the -568h@2x naming convention
    if(IsTall())
    {
        var imagePath = Path.GetDirectoryName(path.ToString());
        var imageFile = Path.GetFileNameWithoutExtension(path.ToString());
        var imageExt = Path.GetExtension(path.ToString());
        imageFile = imageFile + tallMagic + imageExt;
        return UIImage.FromFile(Path.Combine(imagePath,imageFile));
    }
    else
    {
        return UIImage.FromBundle(path.ToString());
    }
}

13

IPhone5 और iPhone4 को XIBs के माध्यम से स्थानांतरित करना आसान है .........

UIViewController *viewController3;
if ([[UIScreen mainScreen] bounds].size.height == 568)
{
    UIViewController *viewController3 = [[[mainscreenview alloc] initWithNibName:@"iphone5screen" bundle:nil] autorelease];               
}    
else
{
     UIViewController *viewController3 = [[[mainscreenview alloc] initWithNibName:@"iphone4screen" bundle:nil] autorelease];
}

12

मैं इस समस्या को यहाँ हल करता हूं । बस ~ 568h @ 2x प्रत्यय को चित्रों में और ~ 568h को xib में जोड़ें। अधिक रनटाइम चेक या कोड परिवर्तन की आवश्यकता नहीं है।


इस वर्ग को परियोजना में जोड़ें। आपको अतिरिक्त कोड लिखने की आवश्यकता नहीं है। उदाहरण के लिए, आपके पास रिज़ॉल्यूशन 320x480, 640x960, 640x1136 (iPhone 3, iPhone 4, iPhone 5) के साथ पृष्ठभूमि छवियों के साथ एक xib-file है। बस सही ऑटोरेस्पिरिंग मास्क और नाम चित्र छवि सेट करें। इमेज, इमेज@2x.png, image~568h@2x.png।
शिमान्स्की आर्टेम

@ ShhansanskiArtem लेकिन मुझे लगता है कि कुछ घटक दूसरे पदों पर चलते हैं ?, क्या आपके पास कोई विचार है ????
Adel

अपने ऑटोरेस्‍पिंग मास्क की जांच करें। मुझे कोई और कारण नजर नहीं आता।
शिमांस्की आर्टेम

10

मैंने नई डिफ़ॉल्ट लॉन्च छवि को जोड़ा था और (कई अन्य एसई उत्तरों की जांच में ...) ने सुनिश्चित किया कि मेरे स्टोरीबोर्ड सभी ऑटो-आकार में खुद को और सब-साइज़ दें लेकिन रेटिना 4 इंच अभी भी लेटरबॉक्स में है।

तब मैंने देखा कि मेरी जानकारी के लिए " लॉन्च छवि " के लिए एक लाइन आइटम " Default.png " था, जिसे मैंने इस प्रकार हटा दिया और जादुई लेटरबॉक्सिंग अब दिखाई नहीं दिया। उम्मीद है, कि किसी और को उसी पागलपन को बचाता है जिसे मैंने सहन किया।


9

मुझे लगता है, यह सभी मामलों में काम नहीं करने वाला है, लेकिन मेरी विशेष परियोजना में इसने मुझे एनआईबी-फाइलों के दोहराव से बचा लिया:

कहीं न कहीं common.hआप स्क्रीन की ऊंचाई के आधार पर ये परिभाषित कर सकते हैं:

#define HEIGHT_IPHONE_5 568
#define IS_IPHONE   ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5)

आपके आधार नियंत्रक में:

- (void)viewDidLoad
{
    [super viewDidLoad];
    if (IS_IPHONE_5) {
        CGRect r = self.view.frame;
        r.size.height = HEIGHT_IPHONE_5 - 20;
        self.view.frame = r;
    }
    // now the view is stretched properly and not pushed to the bottom
    // it is pushed to the top instead...

    // other code goes here...
}

9

में constants.h फ़ाइल में आप इन परिभाषित कथनों को जोड़ सकते हैं:

 #define IS_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad 
 #define IS_IPHONE UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone
 #define IS_WIDESCREEN (fabs((double)[[UIScreen mainScreen] bounds].size.height - (double)568) < DBL_EPSILON) 
 #define IS_IPHONE_5 (!IS_IPAD && IS_WIDESCREEN)

9

यह निर्धारित करने के लिए कि आपका ऐप iPhone 5 रेटिना का समर्थन कर सकता है, इसका उपयोग करें: (यह डिस्प्ले के प्रकार, 4S रेटिना, आदि को वापस करने के लिए अधिक मजबूत हो सकता है, लेकिन जैसा कि नीचे लिखा गया है, यह सिर्फ अगर iPhone iOS5 रेटिना को एक के रूप में समर्थन करता है, तो वापस आ जाता है) हाँ या ना)

एक सामान्य ".h" फ़ाइल में जोड़ें:

BOOL IS_IPHONE5_RETINA(void);

एक सामान्य ".m" फ़ाइल जोड़ें:

BOOL IS_IPHONE5_RETINA(void) {
    BOOL isiPhone5Retina = NO;
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        if ([UIScreen mainScreen].scale == 2.0f) {
            CGSize result = [[UIScreen mainScreen] bounds].size;
            CGFloat scale = [UIScreen mainScreen].scale;
            result = CGSizeMake(result.width * scale, result.height * scale);

            if(result.height == 960){
                //NSLog(@"iPhone 4, 4s Retina Resolution");
            }
            if(result.height == 1136){
                //NSLog(@"iPhone 5 Resolution");
                isiPhone5Retina = YES;
            }
        } else {
            //NSLog(@"iPhone Standard Resolution");
        }
    }
    return isiPhone5Retina;
}

8

सबसे पहले दो xibs बनाएं और सभी डेलीगेट्स, मेन क्लास को अटैच करें xibऔर फिर u आपकी appdelegate.mफाइल में नीचे बताई गई इस कंडीशन में डाल सकते हैं

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

    if ([[UIScreen mainScreen] bounds].size.height == 568)
        {

        self.ViewController = [[ViewController alloc] initWithNibName:@"ViewControlleriphone5" bundle:nil];
        }

        else
        {
             self.ViewController = [[ViewController alloc] initWithNibName:@"ViewControlleriphone4" bundle:nil];

        }

आप अपनी ViewControllerकक्षाओं में भी अपनी आवश्यकताओं के आधार पर कार्यक्रम में इसका उपयोग कर सकते हैं । जो सबसे ज्यादा मायने रखता है वह यह है कि आपने दो xibफाइल अलग से बनाई हैंiphone 4(320*480) and iphone 5(320*568)


7

एकल वर्ग में निम्न विधि का प्रयास करें:

-(NSString *)typeOfDevice
    {
        if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
        {
            CGSize result = [[UIScreen mainScreen] bounds].size;
            if(result.height == 480)
            {
                return @"Iphone";
            }
            if(result.height == 568)
            {
                return @"Iphone 5";
            }
        }
        else{
            return @"Ipad";;
        }


        return @"Iphone";
    }

7

आप Auto Layoutफ़ीचर का उपयोग कर सकते हैं और iPhone 5 स्क्रीन रिज़ॉल्यूशन का उपयोग करके डिज़ाइन बना सकते हैं और यह 4 "और 3.5" दोनों डिवाइस के लिए काम करेगा, लेकिन इस मामले में आपको लेआउट मैनेजर का पर्याप्त ज्ञान होना चाहिए।


यह उन उपकरणों के लिए काम नहीं करेगा जो iOS 6 का समर्थन नहीं करते हैं।
जोंपेज़

7

जाँच हो रही है boundsके साथ 568लैंडस्केप मोड में असफल हो जायेगी। iPhone 5 केवल पोर्ट्रेट मोड में लॉन्च होता है, लेकिन यदि आप घुमाव का समर्थन करना चाहते हैं तो iPhone 5 "चेक" को इस परिदृश्य को भी संभालने की आवश्यकता होगी।

यहाँ एक मैक्रो है जो अभिविन्यास स्थिति को संभालता है:

#define IS_IPHONE_5 (CGSizeEqualToSize([[UIScreen mainScreen] preferredMode].size, CGSizeMake(640, 1136)))

'पसंदीदा' कॉल का उपयोग एक और पोस्टिंग से होता है जिसे मैंने कुछ घंटे पहले पढ़ा था इसलिए मैं इस विचार के साथ नहीं आया।


6

पहले इस छवि को दिखाएं। उस छवि में आप रेटिना 4 समर्थन के लिए चेतावनी दिखाते हैं, इसलिए इस चेतावनी पर क्लिक करें और जोड़ें पर क्लिक करें ताकि आपकी रेटिना 4 स्प्लैश स्क्रीन स्वचालित रूप से आपकी परियोजना में शामिल हो जाए।

यहां चित्र दिखाएं

और इस कोड का उपयोग करने के बाद:

if([[UIScreen mainScreen] bounds].size.height == 568)
    {
        // For iphone 5
    }
    else
    {
        // For iphone 4 or less
    }

6

मैंने कभी भी किसी भी डिवाइस के साथ इस तरह के मुद्दे का सामना नहीं किया है क्योंकि मेरे पास सभी कोडबस हैं, बिना किसी हार्डकोड मान के। मैं क्या करता हूं कि प्रत्येक डिवाइस के लिए एक के बजाय संसाधन के रूप में अधिकतम आकार की छवि होनी चाहिए। उदाहरण के लिए, मेरे पास रेटिना डिस्प्ले के लिए एक होगा और इसे पहलू के रूप में दिखाया जाएगा ताकि यह हर डिवाइस पर देखने जैसा हो। उदाहरण के लिए, रन टाइम पर बटन का फ्रेम तय करना। इसके लिए मैं पेटेंट दृश्य के% मूल्य का उपयोग करता हूं, उदाहरण के लिए, अगर मैं चाहता हूं कि माता-पिता के आधे हिस्से की चौड़ाई 50% अभिभावक लें और वही ऊंचाई और केंद्र के लिए लागू होता है।

इसके साथ मुझे xibs की भी आवश्यकता नहीं है।


5

यदि आप iPhone 5 का उपयोग स्क्रीन आकार के आधार पर कर रहे हैं, तो आप इस परिभाषित का उपयोग कर सकते हैं:

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

फिर एक साधारण ifकथन का उपयोग करें :

    if (IS_IPHONE_5) {

    // What ever changes
    }

4

पीटर, आपको वास्तव में कैनप्पी पर एक नज़र डालनी चाहिए, यह आपके लिए वह सब करता है, जो आपको करना होगा:

button mySubmitButton 'Sumbit' (100,100,100,30 + 0,88,0,0) { ... }

वहाँ से कैनापी सही ऑब्जेक्टिव-सी कोड उत्पन्न करेगा जो उस ऐप का पता लगाता है जो ऐप चल रहा है और जिसका उपयोग करेगा:

(100,100,100,30) for iPhone4
(100,**188**,100,30) for iPhone 5

कनैपी संयुक्त रूप से इंटरफ़ेस बिल्डर और स्टोरी बोर्ड की तरह काम करता है, सिवाय इसके कि यह एक पाठ रूप में है। यदि आपके पास पहले से ही XIB फाइलें हैं, तो आप उन्हें परिवर्तित कर सकते हैं ताकि आपको पूरे UI को स्क्रैच से दोबारा बनाना न पड़े।


बहुत बहुत धन्यवाद, मैं इस पर एक नज़र डालूंगा, लेकिन मैं एक बहुत ही नया प्रोग्रामर हूं और वास्तव में यह सीखना चाहता हूं कि इसे स्वच्छ उद्देश्य-सी में कैसे संभालना है।
पीटरके

4

आप किस डिवाइस पर हैं, यह निर्धारित करने के लिए स्क्रीन साइज़ को मैन्युअल रूप से जाँच सकते हैं:

#define DEVICE_IS_IPHONE5 ([[UIScreen mainScreen] bounds].size.height == 568)

float height = DEVICE_IS_IPHONE5?568:480;
if (height == 568) {
    // 4"

} else {

    // 3"

}

3

आप इस कोड को जोड़ सकते हैं:

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) {
            CGSize result = [[UIScreen mainScreen] bounds].size;
            CGFloat scale = [UIScreen mainScreen].scale;
            result = CGSizeMake(result.width * scale, result.height * scale);

            if(result.height == 960) {
                NSLog(@"iPhone 4 Resolution");
            }
            if(result.height == 1136) {
              NSLog(@"iPhone 5 Resolution");
            }
        }
        else{
            NSLog(@"Standard Resolution");
        }
    }

2
यह वास्तव में थोड़ा गलत है। IOS 4.0 या बाद में चलने वाला कोई भी iPhone scaleचयनकर्ता को जवाब देगा UIScreenऔर आपके पास एक ऐसा मामला होगा जहां आपका "मानक रिज़ॉल्यूशन" कोड निष्पादित नहीं होता है।
फिलिप रेडेलिक

3

यह एक वास्तविक सार्वभौमिक कोड है, आप 3 अलग स्टोरी बोर्ड बना सकते हैं:

अपना प्रोजेक्ट यूनिवर्सल मोड सेट करें, और iPhone5 स्टोरीबोर्ड के साथ अपना मुख्य स्टोरी iPhone सेट करें और iPad लक्ष्य स्टोरीबोर्ड के साथ ipad मुख्य, अब iphone के लिए नया स्टोरीबोर्ड लक्ष्य जोड़ें और iPhone 4s के लिए रिज़ॉल्यूशन को संशोधित करें या कम अब अपने AppDelegate.m को लागू करें

iPhone5 के लिए एक नया स्टोरीबोर्ड लक्ष्य के साथ, iPhone4 / 4s (3 / 3Gs के लिए एक ही है) iPhone5 के लिए एक है और प्रोजेक्ट को सार्वभौमिक बनाते हैं, अब इस कोड के तहत AppDelegate.m में didFinishLaunching:

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
        UIStoryboard *storyBoard;

        CGSize result = [[UIScreen mainScreen] bounds].size;
        CGFloat scale = [UIScreen mainScreen].scale;
        result = CGSizeMake(result.width *scale, result.height *scale);

//----------------HERE WE SETUP FOR IPHONE4/4s/iPod----------------------

        if(result.height == 960){
            storyBoard = [UIStoryboard storyboardWithName:@"iPhone4_Storyboard" bundle:nil];
            UIViewController *initViewController = [storyBoard instantiateInitialViewController];
            [self.window setRootViewController:initViewController];
        }

//----------------HERE WE SETUP FOR IPHONE3/3s/iPod----------------------

        if(result.height == 480){
            storyBoard = [UIStoryboard storyboardWithName:@"iPhone4_Storyboard" bundle:nil];
            UIViewController *initViewController = [storyBoard instantiateInitialViewController];
            [self.window setRootViewController:initViewController];
        }
    }

        return YES;
 }

तो आपने iPhone 3 / 3Gs / 4 / 4s / 5 के लिए एक यूनिवर्सल ऐप बनाया है और सभी प्रकार के आईपैड

के साथ myImage.pngऔर सभी IMG को एकीकृत करने के लिए याद रखेंmyImage@2x.png


2

मेरे अनुसार इस तरह की समस्याओं से निपटने का सबसे अच्छा तरीका और डिवाइस की ऊंचाई की जाँच के लिए आवश्यक कुछ शर्तो से बचना है, दृश्य या किसी भी यूआई तत्व के लिए रिश्तेदार फ्रेम का उपयोग कर रहे हैं जिसे आप उदाहरण के लिए जोड़ रहे हैं: यदि आप जोड़ रहे हैं कुछ यूआई तत्व जो आपको देखने के निचले भाग में या टैब बार के ऊपर चाहिए, फिर आपको अपने दृश्य की ऊंचाई के संबंध में या टैब बार (यदि वर्तमान में) के संबंध में y मूल लेना चाहिए और हमारे पास ऑटो आकार बदलने वाली संपत्ति भी है। मुझे उम्मीद है कि यह आपके लिए काम करेगा


1

सशर्त सेट का उपयोग करने के बजाय आप स्क्रीन आकार का उपयोग करके स्वचालित रूप से अपने विचार का आकार बदल सकते हैं।

int h = [[UIScreen mainScreen] bounds].size.height;
int w = [[UIScreen mainScreen] bounds].size.width;
self.imageView.frame = CGRectMake(20, 80, (h-200), (w-100));

मेरे मामले में मुझे एक दृश्य चाहिए जो शीर्ष पर कुछ इनपुट फ़ील्ड और नीचे कुछ बटन के बीच की जगह को भरता है, इसलिए स्क्रीन के आकार के आधार पर ठीक ऊपर बाएं कोने और चर नीचे स्थित है। मेरा ऐप कैमरे द्वारा खींची गई तस्वीर के साथ छवि दृश्य को भरता है इसलिए मुझे वह सभी स्थान चाहिए जो मुझे मिल सकते हैं।


1

यदि आपको पहले से मौजूद ऐप को यूनिवर्सल में बदलने की आवश्यकता है, तो आपको संबंधित xib फ़ाइल-> यूटिलिटीज-> शो साइज़ इंस्पेक्टर को चुनना होगा।

आकार निरीक्षक में आप ऑटोसाइज़िंग देख सकते हैं, इस उपकरण का उपयोग करके आप मौजूदा iOS ऐप में परिवर्तित कर सकते हैं।


0

XCode 5 का उपयोग करके, प्रोजेक्ट> जनरल पर "एसेट कैटलॉग में माइग्रेट करें" चुनें।

फिर अपनी लॉन्च छवि को खोजने के लिए "शो इन फाइंडर" का उपयोग करें, आप इसे 640x1136 होने के लिए डमी-एडिट कर सकते हैं, फिर इसे एसेट कैटलॉग में ड्रैग कर सकते हैं जैसा कि नीचे दी गई इमेज में दिखाया गया है।

सुनिश्चित करें कि iOS7 और iOS6 R4 खंड दोनों में एक छवि है जो 640x1136 है। अगली बार जब आप ऐप लॉन्च करेंगे, तो काली पट्टियाँ गायब हो जाएंगी, और आपका ऐप 4 इंच स्क्रीन का उपयोग करेगा

यहाँ छवि विवरण दर्ज करें


0

ध्यान देने योग्य बात - नए Xcode में आपको इस छवि फ़ाइल को Default-568h@2x.png संपत्ति में जोड़ना होगा


0

Auto Layoutविचारों के लिए सुविधा का उपयोग करें । यह सभी प्रस्तावों के लिए स्वचालित रूप से समायोजित करेगा।

एक नियंत्रक के लिए दो xibs बनाएं नियंत्रक नाम के साथ प्रत्यय ~ iphone या ~ ipad। संकलन के समय, Xcode डिवाइस के आधार पर सही xib लेगा।

यदि आप iPhone और iPad को पोर्ट करने के लिए पर्याप्त सरल हैं, तो आकार वर्गों का उपयोग करें, यदि आप iPhone और iPad दोनों के लिए एक ही xib बनाना चाहते हैं।


0

IOS डिवाइस और iOS सिम्युलेटर दोनों पर परीक्षण करते समय थोड़ी समस्या होती है। ऐसा प्रतीत होता है कि सिम्युलेटर (XCode 6.0.1) [[UIScreen mainScreen] bounds].sizeडिवाइस अभिविन्यास के आधार पर चौड़ाई और ऊंचाई के लिए स्विच किए गए मान देता है ।

इसलिए सही भौतिक स्क्रीन आकार का निर्धारण करते समय यह एक समस्या हो सकती है। यह कोड सभी 2014 को अलग करने में भी मदद करता है। iPhone मॉडल पीढ़ी:

  • आईफ़ोन 4 स
  • iPhone5 (और iPhone5s)
  • iPhone6 ​​(और iPhone6 ​​+)

इसे iPhone6 ​​+ जैसे iPhone6 ​​के बीच अंतर करने के लिए आसानी से बदला जा सकता है।

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;

    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone)
    {
        if (iOSDeviceScreenSize.width > 568 || // for iOS devices
            iOSDeviceScreenSize.height > 568) // for iOS simulator
        {   // iPhone 6 and iPhone 6+

            // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone6
            storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone6" bundle:nil];

            NSLog(@"loaded iPhone6 Storyboard");
        }
        else if (iOSDeviceScreenSize.width == 568 || // for iOS devices
                 iOSDeviceScreenSize.height == 568) // for iOS simulator
        {   // iPhone 5 and iPod Touch 5th generation: 4 inch screen (diagonally measured)

            // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone5
            storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone5" bundle:nil];

            NSLog(@"loaded iPhone5 Storyboard");
        }
        else
        {   // iPhone 3GS, 4, and 4S and iPod Touch 3rd and 4th generation: 3.5 inch screen (diagonally measured)

                // Instantiate a new storyboard object using the storyboard file named Storyboard_iPhone4
            storyboard = [UIStoryboard story    boardWithName:@"MainStoryboard_iPhone" bundle:nil];

                NSLog(@"loaded iPhone4 Storyboard");
        }
    }
    else if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
    {   // The iOS device = iPad

        storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPadnew" bundle:nil];

        NSLog(@"loaded iPad Storyboard");
    }

    // rest my code
}

0

मैं आपके यूआई इंटरफेस के अनुसार आपके एप्लिकेशन में ऑटोरेस्पिरिंग मास्क का उपयोग करने का सुझाव दूंगा, यह बहुत परेशानी से बचाता है और आईफोन 4 और 5 स्क्रीन के लिए अलग-अलग यूआई बनाने से बेहतर है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.