前言
一個Universal程式還是iPhone、iPad倆個版本 。
通用的:
優點:
一個安裝包,方便管理、分發 可共用一套邏輯代碼,資料結構
缺點:
安裝包會很大:iPad版本用的圖片與iPhone版本的不一樣,而且iPad的圖片大小比較大,積壓起來,會導致整個安裝包很大
代碼中各種判斷是否iPad的邏輯分支,會導致代碼混亂
倆個版本的:
優點:
app可分別針對iPad、iPhone的特點做設計
安裝包相對會比較小
缺點:
兩個按照包,不易於管理、分發
建議:如果你的app,iPad版本跟iPhone版本的介面是差不多的,就做相容iPad和iPhone的app,否則就分開做iPad版、iPhone版。 前提
修改目標裝置族(Build裡面的Targeted Device Family選為iPhone/iPad ),如果未修改的話,在iPad上啟動並執行話,還是iPhone介面,只不過能“2x”放大縮小,修改完target device之後,顯示是iPad介面,原有iPhone上的介面效果在iPad只佔螢幕一部分(ios 6以後發現,無論Target Device是否為Universal,運行什麼device,顯示該機器介面大小,至於顯示效果是只佔一部分還是超出螢幕,看代碼怎麼寫的) 方案1:一套代碼及XIB介面檔案,代碼分if和else來分別處理多種裝置
適用條件:
iPhone、iPad介面布局一樣,比例相同,只不過大小不一樣,直接在initWithFrame、initWithCorder裡面做比例變換即可。 方案2:一套代碼及兩套XIB介面檔案,兩套介面公用一套代碼 適用條件: iPhone、iPad介面布局不一樣,功能、流程、商務邏輯差不多 相關技術: 1. 代碼裡不同邏輯處理:
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad){//iPad 版本代碼;}else{//iPhone/iPod touch 版本代碼;}
2.關於資源檔: iOS Supports Device-Specific Resources(參考:官網中《Resource Programming Guide》iOS Supports Device-Specific Resources小節):格式如下:
<basename><device>.<filename_extension>
device說明:
一般都是:xxx~ipad.extension + xxx.extension倆套(不必xxx~iphone.extension) ~ipad - The resource should be loaded on iPad devices only.
~iphone - The resource should be loaded on iPhone or iPod touch devices only. 意味著,
// 圖片UIImage* anImage = [UIImage imageNamed:@"MyImage.png"];// On an iPhone or iPod touch device, the system loads the MyImage~iphone.png resource file, while on iPad, it loads the MyImage~ipad.png resource file. If a device-specific version of a resource is not found, the system falls back to looking for a resource with the original filename, which in the preceding example would be an image named MyImage.png// xibMyViewController *viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]// load MyViewController~ipad.xib on an iPad, and MyViewController.xib on other devices// 其他類似
3.關於初始配置:
在info.plist檔案中,
Launch image、Main nib file base name、Main storyboard file base name、Supported Interface Orientation這些類似,都能設定成iPhone、iPad不同版本。 對於AppIcon,Image.xcasset裡面也有倆套圖片。
方案3:兩套代碼及XIB介面檔案,兩套代碼及介面互不相干
相關技術:
@interface ViewController : UIViewController@end@interface ViewController_iPad : ViewController@end@interface ViewController_iPhone : ViewController@end
適用條件:
iPhone、iPad介面布局不一樣,功能、流程、商務邏輯不一樣
------------------------ 參考: iPhone 移植到 iPad:http://blog.csdn.net/ch_soft/article/details/7099534 iOS Supports Device-Specific Resources小節:《Resource Programming Guide》