2015-04-22 155 views
3

我有一个名为“SmileyFace”的图像集,其中包含1x,2x和3x图像大小。我想从图像集复制到粘贴板上的特定尺寸。我如何在下面的代码中以编程方式引用1x,2x或3x?在资产目录中访问特定分辨率的图像

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

此代码复制1x。我想复制2张图片。

我还没有在Apple Documentation中找到任何似乎引用此内容的内容。

+0

笑,我会建议你使用'FUNC imageWithTraitCollection(traitCollection:UITraitCollection) - > UIImage' – ztan

回答

3

您可以使用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。

UPDATE: 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])) 
+0

感谢您的答复!那么,这是如何将不同比例的新图像添加到图像集的权利?我不确定这个问题如何适用。我正在尝试引用现有图像集中已有的2x图像? –

+0

这是一种从文件夹中引用图像而非图像资源的方式。您不应该使用特定分辨率(如2x,3x)从图像资源中引用图像。如果你真的想这样做,你应该将1x,2x和3x图像重命名为SmileyFace-Small,SmileyFace-regular,SmileyFace-large。 – ztan

+0

我明白你为什么'平时'不想从图片资源中引用具有特定分辨率的图片。但是这不适用于在应用程序中显示,它不适用于粘贴板。我让xcode在每个设备需要时使用图像资源显示在界面中,但要复制到粘贴板,我需要特定的尺寸。尽管感谢您的回答,但我已经明确了您需要的信息。谢谢! –