2015-04-22 151 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在每個設備需要時使用圖像資源顯示在界面中,但要複製到粘貼板,我需要特定的尺寸。儘管感謝您的回答,但我已經明確了您需要的信息。謝謝! –