2012-06-18 12 views
15

Nella mia cartella delle risorse iOS, ho le immagini:In che modo NSBundle pathForResource: ofType: and UIImage imageWithContentsOfFile: gestisce la scala e i modificatori del dispositivo?

foo~iphone.png 
[email protected]~iphone.png 
foo~ipad.png 
[email protected]~ipad.png 

io caricarli con:

NSString *fileName = [[NSBundle mainBundle] pathForResource:@"foo" ofType:@"png"]; 
UIImage *image = [UIImage imageWithContentsOfFile:fileName]; 

Sperimentalmente:

Su iPhone, filename è /path/to/bundle/foo~iphone.png, e sulla retina iPhone, carica la versione @2x.

Sull'iPad, filename è /path/to/bundle/foo~ipad.png e sull'iPad retina viene caricata la versione @2x.

Cioè, carica l'immagine che mi auguro, ma pathForResource gestisce il modificatore di dispositivo e imageWithContentsOfFile gestisce il modificatore di scala.

Mi piacerebbe sapere perché. Lo documentation di pathForResource non dice nulla sui modificatori di dispositivo e lo documentation di imageWithContentsOfFile non dice nulla sui modificatori di scala.

C'è una documentazione separata che indica esattamente cosa fa ciascuna funzione?

+0

Quale valore è il tuo fileName stringa in attesa quando si imposta un bp sulla riga UIImage? In altre parole come fai a sapere che il ridimensionamento avviene all'interno di imageWithContentsOfFile? –

+0

@MarkM, come ho detto, su iPhone, 'nomefile' è'/percorso/to/bundle/foo ~ iphone.png', quindi so che sta ottenendo solo il nome della versione non- @ 2x .Quando questo nome viene inserito in 'UIImage', ottengo la versione ad alta risoluzione. –

risposta

14

La spiegazione di imageWithContentsOfFile è in related documentation, non nella documentazione UIImage stesso:

Sui dispositivi con schermi ad alta risoluzione, l'imageNamed :, imageWithContentsOfFile :, e initWithContentsOfFile: metodi cerca automaticamente una versione di l'immagine richiesta con il modificatore @ 2x nel suo nome. Se ne trova uno, carica invece quell'immagine. Se non si fornisce una versione ad alta risoluzione di una determinata immagine, l'oggetto immagine carica ancora un'immagine a risoluzione standard (se esistente) e la ridimensiona durante il disegno.

Quando carica un'immagine, un oggetto UIImage imposta automaticamente le proprietà di dimensione e scala su valori appropriati in base al suffisso del file di immagine. Per le immagini a risoluzione standard, imposta la proprietà della scala su 1.0 e imposta la dimensione dell'immagine sulle dimensioni in pixel dell'immagine. Per le immagini con il suffisso @ 2x nel nome file, imposta la proprietà della scala su 2.0 e dimezza i valori di larghezza e altezza per compensare il fattore di scala. Questi valori sono correlati dimezzato correttamente alle dimensioni del punto-based è necessario utilizzare nella logica spazio di coordinate per rendere l'immagine ".

Non so che la documentazione spiega il comportamento di pathForResource.

+0

Si prega di citare dal documentazione. Non riesco a sembrare per trovare ovunque nella documentazione generale di "UIImage" o nella specifica documentazione di "imageWithContentsOfFile" che parla del ridimensionamento. –

+0

E sono anche interessato al motivo per cui "pathForResource" gestisce il modificatore del dispositivo. –

+0

La mia risposta è stata aggiornata per includere citazioni dalla documentazione che parlano dei diversi metodi UIImage e perché le loro azioni fanno ciò che fanno.C'è anche una discussione sul modificatore del dispositivo. Se stai cercando ulteriori informazioni su questo, ti consiglio i video del WWDC in quanto forniscono esempi e l'implementazione di tutte queste tecniche. –

Problemi correlati