2012-09-21 12 views
19

आईफोन 5 के लिए छवियां, नई स्क्रीन आकार और संकल्प के साथ जारी की गईं।आईफोन 5 रेटिना डिस्प्ले

जब हमने आईफोन 4 (रेटिना) के लिए छवियों का उपयोग किया, तो हमने अभी छवि नाम पर "@ 2x" जोड़ा। क्या कोई मुझे बता सकता है, क्या नई आईफोन स्क्रीन के लिए अलग-अलग छवियां (पृष्ठभूमि, बटन इत्यादि) जोड़ना संभव है?

और दूसरा प्रश्न: क्या मेरे ऐप में अलग-अलग एक्सआईबी फाइलें हो सकती हैं: आईफोन के लिए, आईफोन नया (आईफोन और आईपैड की तरह)?

धन्यवाद!

+1

आपको विभिन्न प्रश्नों को अलग-अलग प्रश्नों में अलग करना चाहिए। –

उत्तर

50

यहाँ इस विषय के बारे में मेरे ब्लॉग से सिवाय एक-योग्य है। दुर्भाग्य से, imageNamed: नहीं स्वचालित रूप से -568h छवियों की 2x संस्करणों @, लोड होगा जब एक iPhone 5

कभी कभी यह बात नहीं है पर चल रहा है उदाहरण के प्रतीक और iPhone 4 & पर गैर पूर्ण स्क्रीन ग्राफिक्स शायद रहे हैं उसी के लिए 5. हालांकि, अगर आपके पास टूलबार आदि के लिए पूर्ण-स्क्रीन पृष्ठभूमि छवियां हैं, या पूर्ण-चौड़ाई/ऊंचाई पृष्ठभूमि छवियां हैं तो आपको समस्याएं होंगी। आपकी 480-उच्च छवियां अधिकतर फैली हुई होंगी (और परिणामस्वरूप शायद डरावनी दिखाई देगी)।

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

UIImage* myImage; 
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height; 
if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) { 
    myImage = [UIImage imageNamed:@"myImage-568h.png"]; 
} else { 
    myImage = [UIImage imageNamed:@"myImage.png"]; 
} 

UIImage imageNamed फेरबदल तो यह स्वचालित रूप से सही छवि को लोड करता है का एक तरीका नहीं है। विवरण के लिए नीचे लिंक देखें।

अधिक पर: http://pervasivecode.blogspot.co.uk/2012/09/making-apps-work-on-iphone-5-screen-size.html

संपादित करें: @Sound ब्लास्टर & @GrizzlyNetch ठीक कह रहे हैं, कोड में आप imageNamed का उपयोग करना चाहिए: @ "myImage-568h.png"] लेकिन वास्तविक फ़ाइल नाम होना चाहिए [email protected]। यदि आप ऐसा नहीं करते हैं, तो पैमाने गलत है, जैसा कि उन्होंने कहा था।

+2

मुझे लगता है, सही छवि नाम 'myImage-568h.png' है - बिना @ 2x –

+2

एक और समाधान यहां पाया जा सकता है http://angelolloqui.com/blog/20-iPhone5-568h-image-loading –

+1

2 बेन: मैं सहमत हूं साउंड ब्लस्टर के साथ, कि @ 2x प्रत्यय वहां नहीं होना चाहिए। ऐसा इसलिए है क्योंकि इसे प्रत्यय के साथ कॉल करना रेटिना डिस्प्ले के लिए सही छवि स्केल को प्रारंभ नहीं करता है (छवि नामित चेक अगर प्रत्यय वाली फ़ाइल है और यदि कोई है, तो यह फ़ाइल से छवि लोड करता है और स्केल = 2 सेट करता है)। बस एनएसएलओजी (@ "% f" चलाने के लिए प्रयास करें, [UIImage imageNamed: "Default.png"]। पैमाने); और एनएसएलओजी (@ "% f", [UIImage imageNamed: @ "[email protected]"] स्केल) रेटिना डिवाइस/सिम्युलेटर पर और आपको परिणाम देखना चाहिए। – JakubKnejzlik

11

आईफोन 5 एक नई पिक्सेल घनत्व पेश नहीं करता है ताकि आप पहले इस्तेमाल की गई सभी रेटिना छवियों का उपयोग कर सकें।

आपको आईफोन 5 के नए रिज़ॉल्यूशन का समर्थन करने की आवश्यकता है, आपको दृश्यों को खिड़की से ऊपर उठाना है। अधिकांश दृश्यों के लिए, टेबलव्यू और स्क्रॉलव्यू की तरह यह कोई समस्या नहीं पेश करेगा।

इसके अलावा नए रिज़ॉल्यूशन के लिए अतिरिक्त XIB फ़ाइलों को जोड़ने की आवश्यकता नहीं है, जो भी समर्थित नहीं है।

बस आप क्षुधा को [email protected] IOS 6 आपने एप्लिकेशन अतिरिक्त जगह उपलब्ध iPhone में 5.

सभी देशी नियंत्रण, ले टैब बार की तरह की तरह आप उम्मीद करेंगे व्यवहार करेंगे बनाने बनाने के लिए बंडल जोड़ें।

यदि आप ऐप में आईओएस 4.3 और 5. * का समर्थन करना चाहते हैं तो सुनिश्चित करें कि निब सेटिंग (0 इंटरफ़ेस बिल्डर में पहला टैब) में Use Autolayout बंद है।

[UIImage imageNamed:] स्वचालित रूप से लोड करता है छवियों के 2x संस्करणों @ जब एक रेटिना डिवाइस पर चल रहा

तो सुनिश्चित करें कि आप सही ढंग से सेटअप दृश्य autoresizingMask

1

अगर ([यूआईस्क्रीन मुख्य स्क्रीन]।स्केल == 2. एफ & & स्क्रीनहेइट == 568.0 एफ) फ्लोटिंग पॉइंट नंबरों की सटीक तुलना किसी भी भाषा में स्मृति में संग्रहीत तरीके से गोल करने की त्रुटियों के कारण एक अच्छा विचार नहीं है। उदाहरण के लिए, आप गारंटी नहीं दे सकते कि 568.0 एफ 567.9 99 99 99 या 568.0000001 के रूप में संग्रहीत नहीं है। एक श्रेणी का उपयोग करने के लिए अधिक सुरक्षित, या इस मामले में यह स्क्रीन के लिए पर्याप्त होगा> 567.1 एफ। मुझे संदेह है कि आईफोन भी भौतिक रूप से पिक्सल के अंशों का समर्थन नहीं करता है।

+1

लेकिन सौभाग्य से अभ्यास में चीजें उतनी ही अजीब नहीं हैं जितनी आप उन्हें बना रहे हैं। यदि एक ही मंच पर एक ही कंपाइलर का उपयोग करना है, तो मुझे यकीन है कि 568.0 सभी प्रस्तुतियों में समान है जब तक कि यह कई अन्य परिचालनों से नहीं निकलता है। इसके बारे में सोचें, स्मृति में कहीं कहीं आईफोन की ऊंचाई घोषित की जाती है और आपके ऐप पर लौटा दी जाती है। स्मृति में उन्होंने 568.0 डाल दिया, और फिर आप इसे 568.0 से तुलना करते हैं। वे एक्सकोड/जीसीसी का उपयोग करते हैं, आप एक ही चीज़ का उपयोग करते हैं, तो वही कंपाइलर अलग-अलग बिट्स कैसे लगा सकता है? – RelativeGames

0

मैं वर्तमान में यदि वर्तमान डिवाइस एक 4 "iPhone इस तरह से है का पता लगाने कर रहा हूँ और यह बहुत अच्छा काम करता है। hth

- (BOOL)isiPhone5{ 
    return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568.0); 
} 
1

संपादित

सावधान, iOS8 UIScreen के रूप में उन्मुखीकरण खातों को भी लेने (ऊंचाई की जांच करना, केवल पोर्ट की ऊंचाई होने से पहले दो मान, चित्र की ऊंचाई या परिदृश्य ऊंचाई को वापस कर सकता है), लेकिन xcassets बेहतर हैं, आप इसे यहां देख सकते हैं: How to addapt iphone background?

एंड EDIT

बेन-क्लेटन उत्तर के आधार पर मैंने आईफोन 5 के लिए छवि का प्रबंधन करने के लिए एक आसान श्रेणी बनाई। धन्यवाद।

+ (UIImage *) imageForName:(NSString *)imageName 
{ 
    NSString *result = imageName; 

    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height; 
    BOOL isIphoneFive = ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f); 

    if (isIphoneFive) 
    { 
     NSString *imageNameWithoutExtension = [imageName stringByDeletingPathExtension]; 
     NSString *extension = [imageName pathExtension]; 

     result = [NSString stringWithFormat:@"%@-568h.%@",imageNameWithoutExtension, extension]; 
    } 

    return [UIImage imageNamed:result]; 
} 
संबंधित मुद्दे