Terrains de jeux rapides avec UIImage

Je travaille avec Xcode 6, et j'essaie de recréer le code démo lors de la session 401 "Quoi de neuf dans Xcode 6". J'ai ajouté une image à Images.xcassets (appelée Sample) et dans le file de terrain de jeu j'essaie d'accéder à cette image, comme démo.

Mon code est le suivant (comme la démo):

var sample = UIImage(named: "Sample") 

Cependant, je ne peux pas le faire fonctionner comme la démo. Est-ce que je manque quelque chose?

  1. Ouvrez le file .playground dans le Finder.
  2. Créez un dossier appelé Ressources à côté de lui.
  3. Ajoutez les images que vous voulez dans ce dossier.
  4. Dans la zone de jeu, appuyez sur opt-cmd-1 pour ouvrir l'inspecteur de files. Vous devriez voir le terrain de jeu sur la droite. Si vous ne l'avez pas sélectionné, appuyez sur cmd-1 pour ouvrir le browser de projet et click le file de l'aire de jeux.

Inspecteur de fichiers

  1. Sous "Resource Path", choisissez "Relative To Playground"
  2. Cliquez sur l'icône du dossier ci-dessous et choisissez le dossier Ressources créé précédemment.

Vous devriez maintenant avoir un bundle que vous pouvez utiliser avec le standard NSImage (nommé: "filename_without_extension"):

Travailler nsbundle image

Remarque: étant donné que Xcode replacea fréquemment le dossier .playground, je recommand d'utiliser cette méthode pour que le dossier de ressources ne soit pas constamment supprimé et recréé.

Regardez l'iOS Developer Library-> Playground Aide et searchz "Resource Files" et vous findez la réponse

1, ouvrez le .playground

2, Affichez le browser de projet en sélectionnant Affichage> Navigateurs> Afficher le browser de projet.

3, faites glisser les images vers les ressources

Comme suit:

entrez la description de l'image ici

J'ai eu quelques problèmes avec ça aussi.

Malheureusement, la réponse de Chris n'a pas fonctionné pour moi. Je soupçonne peut-être qu'une version bêta ultérieure de Xcode 6 aurait pu supprimer ce paramètre.

Voici une solution à partir de Xcode 6.0 beta 4 (6A267N) disponible le 21 Juillet 2014. Je suppose que cela correspond à l'option "Inside playground" précédemment. C'est là que le dossier Resources se trouve dans le package du playground lui-même.

Voici comment configurer ceci.

En utilisant le Finder – ou si vous êtes comme moi et utilisez le génial Path Finder – à droite, select et choisissez Afficher le contenu du package comme suit:

entrez la description de l'image ici

Cela révèle le dossier Resources packages:

entrez la description de l'image ici

Copier les files image dans ce dossier fera l'affaire:

 let imageNames = ["back-button", "background", "bg_top"] let images = imageNames.map { UIImage(named: $0) } 

entrez la description de l'image ici

Cependant, je ne peux pas le faire fonctionner comme la démo. Est-ce que je manque quelque chose?

Je ne suis pas sûr où vous devez mettre l'image pour y faire reference en utilisant seulement le nom, mais j'ai obtenu le même code pour travailler en spécifiant le path complet de l'image, comme:

 var sample = UIImage(named: "/Users/my_user_name/Desktop/Image1234.jpg") 

Devoir utiliser le path complet semble plus compliqué qu'il ne devrait l'être, mais cela fonctionne et cela me permet de passer à des problèmes plus intéressants.

Vous pouvez find le path de resourcePath en utilisant ces commands dans playground:

 var bundle = NSBundle.mainBundle() var path = bundle.resourcePath 

Par défaut pour moi était:

 /Applications/Xcode6-Beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Agents 

J'ai eu des difficultés à get cette configuration pour un terrain de jeu iOS, par opposition à un terrain de jeu OS X. Essayer de le faire en utilisant des faisceaux et des paths relatifs le rend plus compliqué.

Si vous voulez simplement mettre la main sur une image rapidement, vous pouvez aussi utiliser le path absolu du file:

Sur iOS:

 # iOS let absoluteImagePath = "/absolute/path/to/image.png" let image = UIImage(contentsOfFile: absoluteImagePath) 

Et sur OS X

 # OS X let absoluteImagePath = "/absolute/path/to/image.png" let image = NSImage(contentsOfFile: absoluteImagePath) 

À partir de Xcode 8 Beta 1, vous pouvez utiliser les littéraux d'image pour importer une image dans un terrain de jeu Xcode:

Commencez à taper l' image pour append un littéral d'image:

Swift Image Literal

Sélectionnez (ou searchz votre image):

Image

Voir votre image en ligne:

En ligne

C'est ce qui a fonctionné pour moi sur Xcode Version 6.1.1.

  1. Créez un file Playground sous le même directory que le storyboard principal.

    Structure du dossier

  2. Ouvrez le volet Utilitaires pour le file Playground, puis click la flèche droite dans la section Resource Path pour append vos images dans ce directory.

    Chemin de ressources pour Playground

  3. Testez l'image dans le file Playground.

    Résultat

En utilisant XCode 6.3.1 et en courant le terrain de jeu en simulateur complet (iOS), j'ai dû faire ce qui suit:

  1. Trouvez votre file .playground dans finder
  2. Faites un clic droit dessus -> affichez le contenu du package
  3. Si ce n'est pas déjà fait, créez un dossier nommé Resources à l'intérieur du package
  4. Ajoutez votre image là-bas

Ensuite instanciez simplement avec let i = UIImage(named: "filename.png")

Sur le terrain de jeu iOS avec XCode 6 beta 5 (et probablement plus tard), vous pouvez voir l'image dans le bundle:

  1. Dans la cour de jeu, appuyez sur Cmd + Opt + 1 et click la flèche située sous le path des ressources (cela ouvrira le Finder)
  2. Mettez votre photo dans ce dossier
  3. Accédez-y avec soit

     let img = UIImage(named: "logo.png", inBundle: NSBundle.mainBundle(), compatibleWithTraitCollection: nil) 

    ou

     let path = NSBundle.mainBundle().pathForResource("logo", ofType: "png") let img = UIImage(contentsOfFile:path) 

    ou dans Swift 4:

     let path = Bundle.main.path(forResource:"logo", ofType: "png") let img = NSImage(contentsOfFile:path!)