Accedi al catalogo delle risorse a livello di programmazione


96

So che è una nuova funzionalità e questo potrebbe non essere possibile, ma mi piacerebbe poter utilizzare un catalogo di risorse per organizzare le mie risorse, ma accedo a tutte le mie immagini in modo programmatico. Come potrei accedere alle mie immagini, adesso? Posso ancora accedervi tramite i loro nomi di file in questo modo:

[UIImage imageNamed:@"my-asset-name.png"];

Apparentemente, il catalogo di asset non fa riferimento all'estensione, quindi sarebbe più efficiente accedervi senza ".png"?

Il motivo per cui chiedo invece di testare personalmente è che anche dopo aver rimosso le mie risorse e il catalogo delle risorse, quindi ho pulito la cartella di build, posso comunque accedere alle mie risorse nella mia applicazione. Ciò mi impedisce di testare il catalogo delle risorse, quando lo implemento.

Dopo aver esaminato il catalogo delle risorse, ho trovato "Contents.json" per ciascuna risorsa ed è formattata in questo modo:

{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "my-asset@2x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

Non sono ancora sicuro di come dovrei accedervi, ma forse questo aiuterà?

Risposte:


138

Per accedere all'immagine dal Catalogo risorse, è sufficiente accedere al nome del gruppo di risorse senza alcuna estensione.

Quindi, se aggiungi un'immagine denominata @"my-button@2x.png"al Catalogo risorse, verrà creato un gruppo di risorse chiamato my-button.

Ora, tutto ciò che devi fare è accedere all'immagine in questo modo:

// Objective-C
[UIImage imageNamed:@"my-button"];
// Swift
UIImage(named: "my-button")

Inoltre, puoi modificare il gruppo di risorse rinominandolo (senza rinominare le immagini) o cambiando i suoi singoli componenti. Ciò ti consentirà di seguire convenzioni di denominazione più semplici e di mostrare risorse completamente diverse tra i diversi messaggi UIScreen scalesenza alcun scalecontrollo.

Per incorporare immagini per dispositivi di dimensioni diverse, potrebbe essere necessario attivarlo sotto il sottotitolo "Dispositivi" nelle opzioni del gruppo di cataloghi di risorse. Ecco un esempio di tale interruttore (disponibile facendo clic con il pulsante destro del mouse sul gruppo).


Le versioni R4, cioè il supporto 568, sono presenti. Se visualizzi gli attributi di un set di immagini, puoi selezionare "Specifico per dispositivo" dal menu a discesa Dispositivi, quindi puoi aggiungere un'immagine R4, che apparirà su dispositivi da 4 "con iOS 7.
bandejapaisa

Esiste un modo per accedere a livello di codice alle informazioni sull'affettatura? Oltre a ottenere la proprietà capInsets dall'oggetto UIImage?
Klaas,

@ Klaas Non sono sicuro del motivo per cui avresti bisogno di ottenerlo con qualsiasi altro mezzo oltre a UIImage. E da quello che ho visto, no, poiché ogni immagine di categoria nel gruppo potrebbe essere un'immagine completamente diversa, quindi non ci saranno informazioni generali, come l'affettatura, disponibili. Oppure mi sfugge qualcosa?
RileyE,

@RileyE Devo fare alcuni calcoli per una visualizzazione sovrapposta personalizzata e vorrei utilizzare gli stessi inserti. Quando devo solo creare un UIImage per i miei calcoli, preferirei memorizzare il valore necessario da qualche altra parte (e ridondante).
Klaas,

1
Il codice Swift sembra essere cambiato inUIImage(named: imageName)
HKTonyLee

26

Inoltre, Apple ha aggiunto un nuovo modo per ottenere immagini da risorse con Swift 3, che si chiama 'Image Literal' e funziona come di seguito:

Immagine letterale


5

Swift

Puoi ottenere un riferimento a un'immagine nel tuo elenco delle risorse con

UIImage(named: "myImageName")

Non è necessario includere l'estensione.


1

@RileyE ha ragione al 100%. Tuttavia, dalle mie esperienze, vale anche la pena notare che a volte il riferimento del catalogo di risorse per l'immagine può contenere uno spazio bianco finale. Probabilmente non noteresti se l'utilizzo di storyboard / xibs come completamento automatico lo aggiungerà. Ma quando lo fai riferimento dal codice non è così ovvio quale sia il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.