![](/img/trans.png)
[英]Access Images from Folder in Assets.xcassets in Xcode Swift
[英]How to add Images for different screen size from Assets.xcassets in Xcode 8?
我為登錄屏幕創建了不同大小的背景圖像。
我指的是蘋果鏈接https://developer.apple.com/ios/human-interface-guidelines/graphics/launch-screen/
但我沒有做Launch Screen,我只是想在Login屏幕上添加背景。
我想知道哪個是1x,2x和3x?
另一個問題是當我創建圖像集時,應該將圖像大小拖到哪個位置。 我不知道那個。 或者我們只需要3張圖片(通用行)?
那么,景觀圖像怎么樣? 我應該把它放在哪里?
我會創建以下尺寸:
蘋果手機:
iPad的:
實際上,你需要為此編碼。
首先 ,您使用不同的名稱將圖像分別放在Assets中。
其次 ,使用以下代碼:
var backgroundImageName = ""
switch UIScreen.main.bounds.height {
case 480:
//for iPhone4s,
backgroundImageName = "background_iPhone4s"
break;
case 568:
//iPhone SE, iPhone5, iPhone 5s
backgroundImageName = "background_iPhone5"
break;
case 667:
//iPhone 6, 6s, 7
backgroundImageName = "background_iPhone6"
break;
case 736:
//iPhone 6 plus, 6s plus, 7 plus
backgroundImageName = "background_iPhonePlus"
break;
default:
break;
}
backgroundImageView.image = UIImage(named: backgroundImageName)
我贊同Yun CHEN,因為我認為最靈活的解決方案是為每個分辨率設置一個圖像集,從而避免在設備上執行圖像縮放。
根據設備的渲染系數(2倍,3倍等)(例如,4.7英寸iPhone上的2倍,作為iPhone 8),您也只需要將相應大小的圖像放入相應的設備中。例如,iPhone 8的圖像集僅需要2x圖像。
但請注意以下幾點:
UIScreen.main.bounds.height返回邏輯分辨率的高度- 即點 ,與UIScreen.main.nativeBounds.height相反,返回實際分辨率的高度- 即像素 (實際上,UIScreen.main.nativeBounds.height總是返回即使您在橫向模式下,設備在縱向模式下的像素高度也是如此。 您應該始終使用與實際分辨率匹配的圖像- 即像素 ,即使您檢查點。
從iOS 8開始,無論您的設備處於縱向還是橫向模式,UIScreen.main.bounds.height都將返回不同的值 。 因此,如果要使用它來區分設備,則應檢查應用程序可以使用的所有值,並且每個值都應該有一個單獨的圖像集。
例如,對於在縱向和橫向模式下工作的應用程序:
var backgroundImageName = ""
if UIDevice().userInterfaceIdiom == .phone
{
switch UIScreen.main.bounds.height
{
case 812: // 5.8" (iPhone X) (3x) (Portrait)
backgroundImageName = "background_1125x2436"
case 736: // 5.5" (iPhone 8+, 7+, 6s+, 6+) (3x) (Portrait)
backgroundImageName = "background_1242x2208"
case 414: // 5.5" (iPhone 8+, 7+, 6s+, 6+) (3x) (Landscape)
backgroundImageName = "background_2208x1242"
case 667: // 4.7" (iPhone 8, 7, 6s, 6) (2x) (Portrait)
backgroundImageName = "background_750x1334"
case 375:
// 5.8" (iPhone X) (3x) (Landscape)
if (UIScreen.main.bounds.width == 812) {
backgroundImageName = "background_2436x1125"
}
// 4.7" (iPhone 8, 7, 6s, 6) (2x) (Landscape)
else if (UIScreen.main.bounds.width == 667) {
backgroundImageName = "background_1334x750"
}
case 568: // 4.0" (iPhone SE, 5s, 5c, 5) (2x) (Portrait)
backgroundImageName = "background_640x1136"
case 320: // 4.0" (iPhone SE, 5s, 5c, 5) (2x) (Landscape)
backgroundImageName = "background_1136x640"
default:
break
}
}
else if UIDevice().userInterfaceIdiom == .pad
{
switch UIScreen.main.bounds.height
{
case 1366: // 12.9" (iPad Pro 12.9) (2x) (Portrait)
backgroundImageName = "background_2048x2732"
case 1112: // 10.5" (iPad Pro 10.5) (2x) (Portrait)
backgroundImageName = "background_1668x2224"
case 834: // 10.5" (iPad Pro 10.5) (2x) (Landscape)
backgroundImageName = "background_2224x1668"
case 1024:
// 12.9" (iPad Pro 12.9) (2x) (Landscape)
if (UIScreen.main.bounds.width == 1366) {
backgroundImageName = "background_2732x2048"
}
// 9.7" & 7.9" (iPad Pro 9.7, iPad Air 2, iPad Air, iPad 4, iPad 3, iPad Mini 4, iPad Mini 3, iPad Mini 2) (2x) (Portrait)
else if (UIScreen.main.bounds.width == 1366) {
backgroundImageName = "background_1536x2048"
}
case 768: // 9.7" & 7.9" (iPad Pro 9.7, iPad Air 2, iPad Air, iPad 4, iPad 3, iPad Mini 4, iPad Mini 3, iPad Mini 2) (2x) (Landscape)
backgroundImageName = "background_2048x1536"
default:
break
}
}
self.backgroundImageView.image = UIImage(named: backgroundImageName)
如果需要包含其他設備(例如Apple Watch),依此類推。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.