Swift playgrounds with UIImage

2019-01-13 05:50发布

问题:

I am working with Xcode 6, and I'm trying to recreate the code demoed during session 401 "What's new in Xcode 6". I've added an image to Images.xcassets (called Sample) and within the playground file I'm trying to access this image, as demoed.

My code is as follows (like the demo):

var sample = UIImage(named: "Sample")

However, I can't get it to work like the demo. Am I missing something?

回答1:

  1. Open the .playground file in Finder.
  2. Create a folder called Resources next to it.
  3. Add any images you want to this folder.
  4. In the playground press opt-cmd-1 to open the File Inspector. You should see the playground on the right. If you don't have it selected, press cmd-1 to open the Project Navigator and click on the playground file.

  1. Under 'Resource Path' choose 'Relative To Playground'
  2. Click the folder icon underneath and choose the Resources folder created earlier.

You should now have a bundle that you can use with the standard NSImage(named:"filename_without_extension"):

Note: Because Xcode will frequently overwrite the .playground folder, I recommend using this method so the resources folder isn't getting constantly deleted and re-created.



回答2:

Look at the iOS Developer Library->Playground Help and search"Resource Files" and you will find the answer

1、Open the .playground

2、Show the Project navigator by selecting View > Navigators > Show Project Navigator.

3、Drag the images to the Resources

Like follow:



回答3:

I had some trouble with this also.

Unfortunately, Chris' answer didn't work for me. I suspect perhaps a later beta release of Xcode 6 may have removed this setting.

Here's a solution as of Xcode 6.0 beta 4 (6A267N) available 21st July 2014. I would guess that this corresponds to the "Inside playground" option previously. That is where the Resources folder is within the playground package itself.

Here's how to set this up.

Using Finder - or if you're like me and use the awesome Path Finder - right select and choose Show Package Contents as follows:

That reveals the packages Resources folder:

Copying the image files into that folder will do the business:

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



回答4:

For Xcode 9:

  • Select Resources folder
  • Right click then "Add files to "Resources""
  • Use it like: let image = UIImage(named: "no")



回答5:

However, I can't get it to work like the demo. Am I missing something?

I'm not sure where you need to put the image to refer to it using only the name, but I got the same code to work by specifying the full path to the image, like:

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

Having to use the full path seems more complicated than it should be, but it works and it let me move on to more interesting problems.



回答6:

You can find out the path of resourcePath using these commands in playground:

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

Default for me was:

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


回答7:

I had difficulty getting this setup for an iOS playground, as opposed to an OS X playground. Trying to do it using bundles and relative paths makes it more complicated.

If you just want to get your hands on an image quickly, you can also just use absolute file path:

On iOS:

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

And on OS X

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


回答8:

As of Xcode 8 Beta 1, you can use Image Literals to import an image into an Xcode playground:

Start typing image to add an image literal:

Select (or browse for) your image:

See your image inline:



回答9:

This is what worked for me on Xcode Version 6.1.1.

  1. Create Playground file under same directory as main storyboard.

  2. Open Utilities pane for Playground file, and click the right arrow in Resource Path section to add your images in that directory.

  3. Test image within Playground file.



回答10:

On the iOS playground with XCode 6 beta 5 (and probably later) you can see the image inside the bundle:

  1. In the playground press Cmd+Opt+1 and click the arrow under the Resource Path (this will open Finder)
  2. Put your picture to this folder
  3. Access it with either

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

    or

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

    or in Swift 4:

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


回答11:

Using XCode 6.3.1 and running playground in full simulator (iOS) I had to do the following:

  1. Find your .playground file in finder
  2. Right click it -> show package contents
  3. If it doesn't already exist, create a folder named Resources inside the package
  4. Add your image there

Then just instantiate with let i = UIImage(named: "filename.png")