【问题标题】:Swift playgrounds with UIImage带有 UIImage 的 Swift Playgrounds
【发布时间】:2014-06-05 20:16:53
【问题描述】:

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

我的代码如下(和demo一样):

var sample = UIImage(named: "Sample")

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

【问题讨论】:

  • 演示是做什么的?
  • 图片是直接在bundle里面吗?

标签: ios uiimage swift xcode6 swift-playground


【解决方案1】:

查看iOS开发者库->Playground Help搜索“资源文件”即可找到答案

1、打开.playground

2、通过选择 View > Navigator > Show Project Navigator 来显示 Project navigator。

3、将图片拖到资源中

点赞:

【讨论】:

  • 我赞成,但有人知道为什么它不适用于 pdf 文件吗?最简单的(可能只有从xCode 8开始),只需将图像文件拖到代码上,它将自动添加,您可以直接使用UIImage(但不要忘记像我一样的扩展名;)
  • 注意:不要忘记添加扩展名,否则你会得到零。
  • 这对我不起作用。我的资源文件夹是灰色的。
  • 不要忘记在写图片名称时不要遗漏 .jpg 或 .png ,如上所示。我这样做了,想知道为什么它不起作用。
  • Xcode 11 beta 5 第 4 步:将图像从资源文件夹拖到您的代码中,您将获得一个工作图像文字。
【解决方案2】:
  1. 在 Finder 中打开 .playground 文件。
  2. 在旁边创建一个名为 Resources 的文件夹。
  3. 将您想要的任何图像添加到此文件夹。
  4. 在操场上按 opt-cmd-1 打开文件检查器。你应该看到右边的操场。如果您没有选择它,请按 cmd-1 打开 Project Navigator 并单击 Playground 文件。

  1. 在“资源路径”下选择“相对于游乐场”
  2. 点击下方的文件夹图标,选择之前创建的 Resources 文件夹。

您现在应该有一个可以与标准 NSImage 一起使用的包(命名为:“filename_without_extension”):

注意:因为 Xcode 会经常覆盖 .playground 文件夹,所以我建议使用这种方法,这样资源文件夹就不会被不断地删除和重新创建。

【讨论】:

  • 感谢您的回复。我试图遵循这一点,但我看不到“相对于游乐场”选项。我只有“绝对路径,相对于组,相对于项目,相对于开发者目录,相对于构建产品,相对于 SDK”。
  • 这是“位置”下拉菜单。您想要在 Playground Settings 下名为“Resource Path”的下拉菜单。
  • 为什么不使用“内部游乐场”而不是“相对于游乐场”?第一个更简单,适合我。
  • 我认为最新的 Xcode 测试版一定改变了这一点,因为资源路径不再有下拉菜单
【解决方案3】:

我也遇到了一些麻烦。

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

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

这是设置方法。

使用 Finder - 或者如果您像我一样使用很棒的 Path Finder - 右键选择并选择 显示包内容,如下所示:

这会显示包 Resources 文件夹:

将图像文件复制到该文件夹​​中即可:

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

【讨论】:

  • 谢谢!!这似乎是现在唯一的方法。这应该被标记为正确的答案(直到一个新的测试版也打破了这个......)
【解决方案4】:

对于 Xcode 9:

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

【讨论】:

    【解决方案5】:

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

    开始输入image 以添加图像文字:

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

    查看内嵌图片:

    【讨论】:

      【解决方案6】:

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

      我不确定您需要将图像放在哪里才能仅使用名称来引用它,但通过指定图像的完整路径,我得到了相同的代码,例如:

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

      必须使用完整路径似乎比应有的复杂得多,但它确实有效,它让我可以继续解决更有趣的问题。

      【讨论】:

      • 我注意到演示的“资源路径”设置为“内部游乐场”,但即使复制了我在演示屏幕截图中可以看到的所有设置,我也无法让它工作.
      • 感谢 Celeb,您的解决方案有效。虽然很高兴知道将图像放在哪里以通过名称而不是路径来引用它。
      【解决方案7】:

      您可以在 Playground 中使用这些命令找出 resourcePath 的路径:

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

      我的默认设置是:

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

      【讨论】:

        【解决方案8】:

        我很难为 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)
        

        【讨论】:

        • 出于某种原因,我遇到了一些麻烦。我的错误是:“执行被中断,原因:EXC_BAD_ACCESS(代码=1,地址=0x0)。”有什么想法吗?
        • 是的,我注意到了同样的事情。他们改变了一些东西,至少从 Xcode6-Beta6 开始,因此在 iOS 操场上,您不能使用 UIImage(contentsOfFile:) 来使用绝对路径抓取图像。我不确定这是否是由于文件系统沙箱、错误或其他更微妙的原因而导致的预期行为。
        【解决方案9】:

        这在 Xcode 版本 6.1.1 上对我有用。

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

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

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

        【讨论】:

          【解决方案10】:

          在带有 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!)
            

          【讨论】:

          • 这对我有用,并且避免了我一直得到的 BAD_ACCESS
          【解决方案11】:

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

          1. 在 finder 中找到您的 .playground 文件
          2. 右键单击它 -> 显示包内容
          3. 如果不存在,请在包内创建一个名为 Resources 的文件夹
          4. 在此处添加您的图片

          然后只需实例化 let i = UIImage(named: "filename.png")

          【讨论】:

            【解决方案12】:

            我不知道为什么它不能以简单的方式处理 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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-04-10
              • 2016-08-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多