在资源目录中访问具有特定分辨率的图像

7

我有一个名为“SmileyFace”的图像集,其中包含1x、2x和3x的图像大小。我想从图像集中复制特定大小的图像到剪贴板。在下面的代码中如何以编程方式引用1x、2x或3x?

let image = UIImage(named: "SmileyFace" )
let image2 = UIImagePNGRepresentation( image )
UIPasteboard.generalPasteboard().setData(image2, forPasteboardType: "public.png")

这段代码复制了1x的图片,我想要复制2x的图片。

我在苹果文档中没有找到任何关于此的参考。


哈哈,我本来想建议你使用func imageWithTraitCollection(traitCollection: UITraitCollection) -> UIImage - ztan
1个回答

6
您可以使用imageAsset.registerImage()方法:
  let scale1x = UITraitCollection(displayScale: 1.0)
  let scale2x = UITraitCollection(displayScale: 2.0)
  let scale3x = UITraitCollection(displayScale: 3.0)

  let image = UIImage(named: "img.png")!
  image.imageAsset.registerImage(UIImage(named: "img_2x.png")!, withTraitCollection: scale2x)
  image.imageAsset.registerImage(UIImage(named: "img_3x.png")!, withTraitCollection: scale3x)

您可以为所有比例注册2x图像。
但是,我认为使用特定分辨率访问图像并不是一个好主意。1x、2x和3x图像集的想法是让系统决定加载哪个图像。如果您真的想这样做,可以将1x、2x和3x图像的名称更改为SmileyFace-Small、SmileyFace-Regular和SmileyFace-Large。
更新: func imageWithTraitCollection(traitCollection: UITraitCollection) -> UIImage可以引用具有特定比例的图像:
  let image1 = image.imageAsset.imageWithTraitCollection(UITraitCollection(traitsFromCollections: [scale1x]))
  let image2 = image.imageAsset.imageWithTraitCollection(UITraitCollection(traitsFromCollections: [scale2x]))
  let image3 = image.imageAsset.imageWithTraitCollection(UITraitCollection(traitsFromCollections: [scale3x]))

谢谢您的回复!那么,这就是您如何将不同比例的新图像添加到图像集中,对吗?我不确定它如何适用于问题。我正在尝试引用已经存在的2x图像,该图像位于已经存在的图像集内? - Chris Johnson
这是从文件夹引用图像而不是从图像资源引用的一种方式。您不应该从图像资产中引用特定分辨率的图像,例如2x、3x。如果您真的想要这样做,您应该将1x、2x和3x图像重命名为SmileyFace-Small、SmileyFace-Regular、SmileyFace-Large。 - ztan
我理解为什么你通常不想从图像资源引用特定分辨率的图像。但这不是为了在应用程序中显示,而是为了粘贴板。当每个设备需要时,我让Xcode使用图像资源在界面中显示,但是为了复制到粘贴板中,我需要一个特定的大小。谢谢你的回答,我已经从你的帖子中找到了我需要的东西。谢谢! - Chris Johnson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接