2012-10-19 6 views
7

मेरे FirstViewController मैं अगर डिवाइस iPhone4 या iPhone5 है स्विच पृष्ठभूमि के लिए इस कोड लिखने है:स्विच पृष्ठभूमि छवि iphone5 - iphone4

फ़ाइल का नाम: [email protected]
bg-for4 @ 2x .png
bg-for4.png

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIImage *backgroundImage = [[UIImage alloc] init]; 
    if([[UIScreen mainScreen]bounds].size.height == 568) 
    { 
     backgroundImage = [UIImage imageNamed:@"bg-for5-568h"]; 
    } 
    else 
    { 
     backgroundImage = [UIImage imageNamed:@"bg-for4"]; 
    } 
    self.view.backgroundColor = [[[UIColor alloc] initWithPatternImage:backgroundImage] autorelease]; 
    [backgroundImage release]; 
} 

जब मैं अपने सिम्युलेटर पर अनुप्रयोग lanch, iphone5 के लिए पृष्ठभूमि डबल आकार, दृश्य से बाहर दिखा।

/* यह संकल्प * धन्यवाद/

+0

यह देखें कि: http://stackoverflow.com/questions/12446990/how-to-detect-iphone-5-wodes-devices –

+2

यह दोहरा आकार होगा क्योंकि यह डबल आकार है और आईओएस इसे फैलाएगा ताकि 1 पिक्सेल छवि का ग्राफ़िक फलक के 1.0 "पिक्सेल" में प्रदर्शित किया जाएगा जो रेटिना उपकरणों पर 2 हार्डवेयर पिक्सेल से अधिक फैला हुआ है।इस मुद्दे से निपटने के कई तरीके हैं। कोड की उस पंक्ति में "bg-for5-568h @ 2x" को "bg-for5-568h" में बदलने के लिए सबसे आसान है, लेकिन पीएनजी फ़ाइल का नाम न बदलें। –

+0

बहुत बहुत धन्यवाद! अब सही काम करता है। – Jimmy

उत्तर

5

मुझे इस बात का समाधान नहीं है कि मुझे याद आ रही है कुछ इंफोस, लेकिन:

पहले: विधि से .png को स्ट्रिप करें। आईओएस 4 के बाद से, आपको यह और नहीं करना चाहिए। अगली बात यह है कि: आपकी छवि के नाम क्या हैं? ध्यान दें कि एक आईफोन 5 में रेटिना डिस्प्ले है, और आपकी छवि को [email protected] नाम दिया जाना चाहिए, लेकिन स्रोत कोड में bg-for5-568h के रूप में संदर्भित किया जाना चाहिए।

इसके अलावा: लगभग हर मामले में जहां आपकी छवि एक तस्वीर नहीं है, आप जो कर रहे हैं वह एक बुरा विचार है। और यहां तक ​​कि अगर यह एक तस्वीर है, तो आईफोन 4 और 4 एस के लिए भी बड़ी छवि का उपयोग करें। यह इतना बड़ा नहीं है, इसलिए स्मृति पदचिह्न यहां कोई समस्या नहीं है! UIImageView की contentMode संपत्ति पर एक नज़र डालें। आप बड़ी छवि की स्थिति समायोजित करने के लिए इसका उपयोग कर सकते हैं। यदि आप पूर्णस्क्रीन नहीं हैं तो आप छवि को क्लिप करने के लिए UIImageView s clipSubviews संपत्ति को भी देखना चाहेंगे।

मेरा विश्वास करो, मेरी कंपनी में हमारे पास ~ आईपैड, ~ आईफोन, ~ 2 एक्स और यहां तक ​​कि खिंचाव वाली छवियों जैसे सामानों के लिए हुक का लूट था। और ये सभी हुक तारीख तक ठीक काम करते थे, सेब ने कुछ ऐसा ही या बस एक नया डिवाइस घोषित किया। तो मैंने अब इस तरह के हुक नहीं करने का फैसला किया। वे पहली जगह में बहुत मददगार प्रतीत होते हैं, लेकिन बाजार में कुछ नया होने पर आपको जो परेशानी मिलती है वह इसके लायक नहीं है!

+0

मैंने अपना कोड संपादित किया है, मेरे पास प्रत्येक दृश्य के लिए एक अलग पृष्ठभूमि है। मुझे नहीं पता क्योंकि iphone5 पृष्ठभूमि में दृश्य के बाहर, अधिक बड़ा दिखाया गया है। – Jimmy

+1

अपने संपादित कोड में '@ 2x' दबाएं! कोड में बस '@ 2x' के साथ छवि का नाम होना चाहिए, बस फ़ाइल का नाम दें! –

+0

अब काम करें! बहुत ज्यादा – Jimmy

1

मैं यह कर सलाह नहीं होगा, क्या हुआ अगर एप्पल फिर से उनके screensize बदल सकते हैं और आप वापस जा सकते हैं और अपने सभी कोड को फिर से लिखने के लिए है?

self.view.backgroundColor = [UIColor colorWithPatternImage:/* your image*/]; 

यह खींच या खपरैल के साथ कुछ मुद्दों पर दे सकता है:

एक साधारण ठीक उपयोग करने के लिए है।

मैं

UIImage* imageName = [[UIImage imageNamed:/*image name*/]resizableImageWithCapInsets:UIEdgeInsetsMake(top,left,bottom,right)]; 

का उपयोग कर iOS 6 में पसंद करते हैं आप छवि को फैलाने या टाइल करना चाहते हैं तो आप को परिभाषित करते हुए यह आगे सुधार कर सकते हैं। यह आपको एक सीमा बनाने की अनुमति देता है जो बदलेगा और फिर आपकी छवि का केंद्र डिफ़ॉल्ट रूप से टाइल किया जा रहा है और आपकी छविदृश्य

+0

यह केवल तभी काम करता है जब आपको आईपैड और आईफोन या आईफोन का समर्थन करना पड़े। यह आईफोन 4 और आईफोन 5 (डॉन ऐप्पल!) –

+0

के लिए काम नहीं करता है यह आईफोन 4 और आईफोन 5 पर मेरे लिए काम करता है। आपको अपने इमेजव्यू के फ्रेम को self.view.bounds पर सेट करना होगा –

+0

एमएम, सेब संदर्भ पढ़ना मुझे यह नहीं मिला, क्या यह ज़िब के साथ भी काम करता है? –

2

आपको अपनी सभी रेटिना छवियों में @ 2x प्रत्यय जोड़ना चाहिए। आपके मामले में आपकी छवि को "[email protected]" के रूप में संग्रहीत किया जाना चाहिए। आशा है कि यह इस मुद्दे को हल करेगा।