[英]How to support various iphone screen sizes as of 2014?
我差不多已經完成了我的第一個iPhone應用程序的構建,並且正在嘗試添加背景圖像,並且發現它有點令人困惑,因為現在不同的iPhone版本中有3個或4個不同大小的屏幕,具有不同的啟動分辨率。
所以雖然我知道整個image@2x.png
事情,但我仍然不知道我真正需要什么。 如果我想讓我的應用程序在iPhone 4 / 4s,5s / 5c,6/6 +上運行,我需要多少個不同版本的背景圖像,以及尺寸和分辨率是多少?
我已經google了,並沒有找到任何最新的2014年的有凝聚力的答案。
此外,如果iPhone 6是1334x750 @ 3x,這是否意味着我應該包括4002x2250背景? 然后是1920x1080 iPhone 6+ @ 3x,5760 x 3240圖像? 這太棒了! 我覺得我必須正確理解這一點。
我認為最簡單的方法是使用適合iPhone 6+的圖像,然后簡單地將UIImageView
的contentMode
設置為UIViewContentModeCenter
。 我認為這至少是一個,結果應該是在iPhone 6+上你有一個居中的圖像,但在其他屏幕上你只是得到一部分圖像。
iPhone 6+的下采樣意味着覆蓋整個屏幕的@ 3x資產應該是2208x1242(也就是說,這個分辨率已經是3倍。“真正的”分辨率是736x414)。 這是所需的最大分辨率,然后您可以使用我描述的方法為@ 2x和@ 1x資產使用相同的圖像。
如果要支持iPhone 6 / Plus的原生分辨率,則需要添加啟動圖像(iOS 8之前)或啟動屏幕xib(iOS 8)。
iPhone 4 / 4S:640 x 960
iPhone 5 / 5S:640 x 1136
iPhone 6:750 x 1334
iPhont 6 Plus:1242 x 2208
這意味着如果要支持這些設備,則需要准備4張具有上述分辨率的啟動圖像。 您可以使用iOS模擬器捕獲具有不同分辨率的屏幕截圖。 如果找不到特定分辨率的啟動圖像,您的應用將在新分辨率設備上以compatibility mode
運行。 compatibility mode
意味着當仍具有相同的邏輯大小時,您的視圖將縮放以適應新的屏幕大小。
編輯:
我認為op誤解了@2x
和@3x
含義。 iPhone 6的分辨率為750(pixels) x 1334(pixels), 326 pixels per inch
。 這是真正的分辨率。 如果支持原始分辨率,則375(points) x 667(points)
是邏輯大小。 iPhone 6 Plus的分辨率為1242(pixels) x 2208(pixels), 401 pixels per inch
,邏輯大小為414(points) x 736(points)
。
這是具有不同分辨率的圖像在iOS設備上的工作方式:
假設你想在iPhone 4s,iPhone 5 / 5S,iPhone 6 / plus上運行你的應用程序。 您應該做的第一件事是提供4個啟動圖像以支持這些設備的原始分辨率。 當iOS啟動您的應用程序時,它將檢查應用程序是否提供正確的啟動映像以支持當前設備的本機分辨率。 如果iOS找到它,那么在啟動時使用它並且屏幕的邏輯大小是正確的 ,您的應用程序正常運行。 否則,您的應用將以compatibility mode
運行,其中將縮放所有視圖。
假設您的app中有一個名為foo.png
的圖像,其邏輯大小為100(points) x 100(points)
。 您希望此圖像在上述所有設備中看起來都相同。 您應該提供此圖像的2個版本。 一個是200(pixels) x 200 (pixels)
,應該命名為foo.png@2x
,另一個是300(pixels) x 300(pixels)
名為foo.png@3x
。 如果使用[UIImage imageNamed:@"foo"]
加載此圖像,則在iPhone 6 plus以外的設備上,該應用程序將加載名為foo.png@2x
的圖像。 否則,應用程序將加載foo.png@3x
並將其采樣到300 * 84%(像素)x 300 * 84%(像素)。
如果從URL加載圖像並需要在運行時呈現它。 假設你得到的大小是{width:100, height:100}
,比例是1.0
。 這意味着此圖像的REAL大小為100 * 1.0(pixels) x 100 * 1.0(pixels
。如果您不希望它被縮放,您需要自己計算邏輯大小。您這樣做:
UIImage *image = ... // you get it from an url
CGFloat scale = [UIScreen mainScreen].scale;
CGFloat width = image.size.width / scale;
CGFloat height = image.size.height / scale;
CGRect frame = CGRectMake(50.0f, 50.0f, width, height)];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame];
imageView.contentMode = UIViewContentModeCenter;
imageView.image = image;
[self.view addSubview:imageView];
您將需要三個版本的背景圖像(1x,2x,3x)。一個良好的做法,使圖像的大小正確,是制作一個尺寸是視圖大小3倍的圖像,然后制作2x和縮小1x版本。
Apple提出了一個名為“Size Classes”的新概念來支持不同的設備尺寸。要使用尺寸類,您需要最新版本的Xcode(Xcode 6)。 在界面構建器中,您可以為不同的大小類設置不同的約束集。 這樣,支持所有屏幕尺寸變得更加容易。 要了解有關大小類的更多信息,請觀看WWDC 2014視頻“使用UIKit構建自適應應用程序”。
您使用的是哪種游戲引擎? 如果您使用的是cocos2d或cocos2dx,則可以使用960 * 640的背景圖像。下面的代碼將根據屏幕大小縮放圖像。
CCSize frameSize = pEGLView->getFrameSize();
CCSize designSize = CCSizeMake(480, 320);
vector<string> searchPaths;
CCSize resourceSize;
Utility :: isPad = true;
searchPaths.push_back("hd");
resourceSize = CCSizeMake(960, 640);
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(designSize.width , designSize.height, kResolutionExactFit);
pDirector->setContentScaleFactor(resourceSize.width/designSize.width);
這些是您的背景圖像所需的不同分辨率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.