带有UIImage的Swift游乐场

时间:2014-06-05 20:16:53

标签: ios uiimage swift xcode6 swift-playground

我正在使用Xcode 6,并且我正在尝试重新创建在会话401期间演示的代码" Xcode 6"中的新功能。我已将图像添加到Images.xcassets(称为Sample),并在playground文件中我试图访问此图像,如演示一样。

我的代码如下(如演示):

var sample = UIImage(named: "Sample")

但是,我无法像演示那样使用它。我错过了什么吗?

12 个答案:

答案 0 :(得分:93)

查看iOS开发人员库 - > Playground Help并搜索“资源文件”,您将找到答案

1,打开.playground

2,选择View>显示Project导航器。导航器>显示Project Navigator。

3,将图像拖到资源

如下:

enter image description here

答案 1 :(得分:64)

  1. 在Finder中打开.playground文件。
  2. 在其旁边创建一个名为Resources的文件夹。
  3. 将您想要的任何图像添加到此文件夹。
  4. 在操场上按opt-cmd-1打开文件检查器。你应该看到右边的游乐场。如果您没有选择它,请按cmd-1打开Project Navigator并单击playground文件。
  5. File Inspector

    1. 在“资源路径”下选择“相对于游乐场”
    2. 单击下面的文件夹图标,然后选择之前创建的Resources文件夹。
    3. 您现在应该有一个可以与标准NSImage一起使用的包(名为:“filename_without_extension”):

      Working nsbundle image

      注意:由于Xcode会经常覆盖.playground文件夹,因此我建议使用此方法,以便不会不断删除和重新创建资源文件夹。

答案 2 :(得分:32)

我也遇到了一些麻烦。

不幸的是,克里斯的回答对我不起作用。我怀疑Xcode 6的后续版本可能已经删除了这个设置。

这是Xcode 6.0 beta 4(6A267N)于2014年7月21日发布的解决方案。我猜这与之前的“Inside playground”选项相对应。这是Resources文件夹本身在playground包中的位置。

以下是如何设置它。

使用Finder - 或者如果您像我一样使用了真棒Path Finder - 请选择显示包装内容,如下所示:

enter image description here

显示包资源文件夹:

enter image description here

将图像文件复制到该文件夹​​即可开展业务:

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

enter image description here

答案 3 :(得分:10)

对于Xcode 9:

  • 选择资源文件夹
  • 右键单击然后" 将文件添加到"资源" "
  • 使用它像: let image = UIImage(named: "no")

enter image description here

答案 4 :(得分:4)

从Xcode 8 Beta 1开始,您可以使用Image Literals将图像导入Xcode游乐场:

开始输入__setattribute__以添加图片文字:

Swift Image Literal

选择(或浏览)您的图片:

Image

以内联方式查看您的图片:

Inline

答案 5 :(得分:3)

  

然而,我无法让它像演示一样工作。我错过了什么吗?

我不确定在哪里只需要使用名称就可以将图像引用到它,但我通过指定图像的完整路径来获得相同的代码,例如:

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

必须使用完整路径似乎比它应该更复杂,但它起作用,它让我转向更有趣的问题。

答案 6 :(得分:3)

您可以在playground中使用以下命令找到resourcePath的路径:

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

默认为:

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

答案 7 :(得分:3)

我很难在iOS操场上进行此设置,而不是OS X游乐场。尝试使用捆绑包和相对路径来实现它会使它更复杂。

如果您只想快速获取图像,还可以使用绝对文件路径:

在iOS上:

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

在OS X上

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

答案 8 :(得分:2)

在XCode 6 beta 5(可能稍后)的iOS游乐场上,你可以看到包中的图像:

  1. 在游乐场按Cmd + Opt + 1并单击资源路径下的箭头(这将打开Finder)
  2. 将图片放入此文件夹
  3. 使用

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

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

    或在Swift 4中:

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

答案 9 :(得分:2)

这对Xcode Version 6.1.1起了作用。

  1. 在主故事板的同一目录下创建Playground文件。

    Folder Structure

  2. 打开Playground文件的“实用工具”窗格,然后单击Resource Path部分中的右箭头,将您的图像添加到该目录中。

    Resource Path for Playground

  3. 在Playground文件中测试图像。

    Result

答案 10 :(得分:1)

使用XCode 6.3.1并在完整模拟器(iOS)中运行playground我必须执行以下操作:

  1. 在finder中找到.playground文件
  2. 右键单击 - >显示包装内容
  3. 如果它尚不存在,请在包
  4. 中创建名为Resources的文件夹
  5. 在那里添加您的图片
  6. 然后只是实例化 let i = UIImage(named: "filename.png")

答案 11 :(得分:0)

我不知道为什么它不能以简单的方式处理 PDF 图像。

我必须添加此扩展程序才能将 PDF 图像加载到我的 Playground 中:

extension UIImage {

    static func fromPDF(_ url: URL) -> UIImage? {
        var image: UIImage?
        guard
            let doc  = CGPDFDocument(url as CFURL),
            let page = doc .page(at: 1)
        else { return nil }

        let pageRect = page.getBoxRect(.mediaBox)
        let renderer = UIGraphicsImageRenderer(size: pageRect.size)

        image = renderer.image { ctx in
            UIColor.clear.set()
            ctx.fill(pageRect)
            ctx.cgContext.translateBy(x: 0.0, y: pageRect.size.height)
            ctx.cgContext.scaleBy(x: 1.0, y: -1.0)
            ctx.cgContext.drawPDFPage(page)
        }
        return image
    }
}

// Given the file "myImage.pdf" was added to your Playground's Resources folder.
let image = UIImage.fromPDF(#fileLiteral(resourceName: "myImage.pdf"))

基于此:https://developer.apple.com/forums/thread/90990