2012-02-21 12 views
7

Quindi in futuro probabilmente un iPad avrà il display Retina. E probabilmente Apple andrà a stick to the @2x paradigm. Mi aspettavo questo per un po 'e quindi ho già @ 2x artwork per iPad nelle mie app; alcuni sono già nell'app store.Display Retina per iPad 3, @ 2x immagini e app già nel negozio

La mia domanda è questa: dovrò ricompilare e/o inviare nuovamente app per utilizzare detto disegno quando questo mitico iPad viene rilasciato per poter sfruttare questi file? O è qualcosa che è cotta nel sistema operativo stesso e dovrebbe solo usarlo automagicamente?

(Dal momento che la stessa cosa è accaduto prima, quello che è successo w/apps rilasciato sotto i pre-iPhone-4 SDK che è accaduto di avere l'opera giusta? Hanno solo di lavoro?)

+1

Non penso che nessuna app pre-iPhone-4 abbia avuto l'artwork giusto ... – Thilo

+0

Abbastanza sicuro, qualcuno sa per certo se questo è corretto? –

risposta

6

ho sperimentato con una retina iPad oggi, ed ecco quello che sembra accadere:

  • Se un'applicazione è compilato con un ragionevolmente recente Xcode (probabilmente 4.2+), @ immagini 2x vengono utilizzati, proprio come quando l'iPhone 4 è uscito.
  • Se un'app è stata compilata con Xcode 3, le immagini @ 2x sono non utilizzate, anche se presenti. (ad esempio in un'app ibrida compatibile con iPhone 4)

(Abbiamo un numero di progetti basati su XCode-3, molti dei quali sono ibridi per l'iPhone retina. Nessuno di essi ha utilizzato la grafica @ 2x su il nuovo ipad. Quando ho compilato un progetto di test sia in Xcode 3 che in Xcode 4, il 4 build ha usato la risorsa retina e la 3 build no. Ulteriori esperimenti hanno mostrato che la differenza è compilata nell'eseguibile stesso, quindi non è solo una info.plist tweak come speravo.)

[eta: la mia ipotesi è che la compilazione con un precedente SDK ti collega a una versione diversa di UIKit in fase di runtime. Strane differenze di comportamento mentre aggiorno il nostro codice sembrano confermarlo. Se qualcuno conosce con certezza l'incantesimo, per favore commenta.]

[modificato per aggiungere, ancora: c'è qualche differenza di pennino pure. Un vecchio progetto aperto in xcode 4 non avrebbe usato la grafica @ 2x fino a quando non ho ri-salvato il mio MainWindow.nib; poi ha fatto tutto, senza altri cambiamenti. . Ho il sospetto che una proprietà nascosta dell'oggetto UIWindow]

+0

Non che questa sia una buona notizia, ma sto vivendo la stessa esperienza, almeno la parte riguardante le immagini @ 2x non utilizzate durante la compilazione con Xcode3. Non ho ancora provato Xcode 4. Grazie per la pubblicazione, almeno so che non sono pazzo. – hyperspasm

+0

Wow, questa è una risposta dettagliata. Grazie! – DOOManiac

1

Suppongo che questo sarà solo di lavoro sul dispositivo. È a mia conoscenza che [UIImage imageNamed:] cerca @ 2x se il dispositivo lo supporta. Quindi sembra integrato in iOS. Questa è solo una supposizione.

2

Quello che ho trovato quando si costruisce con XCode 4.2 (iOS SDK 5.0) in esecuzione su Snow Leopard è il seguente:

immagini caricate di programmazione utilizzando [UIImage imagedNamed: ] nel tuo codice caricherà correttamente la retina @ 2x immagini sulla retina iPad.

Le immagini specificate sui pulsanti e le viste in Interface Builder I file XIB in genere NON caricano correttamente le immagini di retina @ 2x.

La soluzione che ho scoperto era quello di costringere UIImage per memorizzare nella cache ciascuna delle immagini si fa riferimento nella vostra XIB utilizzando [UIImage imagedNamed:] chiamate nel vostro controller della vista del (o dei casi) initWithnibName: (NSString *) bundle: (NSBundle *) . Il metodo programmatico esegue un buon caricamento @ 2x e il sistema lo memorizza nella cache, che il meccanismo di caricamento XIB finisce per fare riferimento, producendo immagini di retina. Ad esempio:

// The designated initializer. Override to perform setup that is required before the view is loaded. 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     // Doing this to precache proper retina versions, because older xcode nibs aren't loading them correctly on retina iPads with XCode 4.2 builds 

     [UIImage imageNamed:@"my_button.png"]; 
     [UIImage imageNamed:@"my_other_button.png"]; 
    } 
    return self; 
} 

Suppongo che l'edificio con XCode 4.3 (SDK 5.1) funziona correttamente con XIBs, ma non ero preparato ad eseguire l'aggiornamento a Lion solo per usare quella versione di XCode.

+0

Grazie! Ho riscontrato quanto segue: Se non si specifica il nome dell'immagine come "[email protected]" e Xcode cerca il file @ 2x stesso, troverà il file, ma non lo visualizzerà correttamente. Non verrà ridimensionato come previsto. Tuttavia se carichi la tua immagine come "[email protected]", viene visualizzata correttamente. Dovrei presentare un bug report, ma al momento sono troppo esausto dopo tutto questo esperimento. – tmighty

Problemi correlati