iPhone 移植到 iPad:
- 方法一 修改裝置目標設定(普通模式:一套代碼及XIB介面檔案,代碼分if和else來分別處理多種裝置)
預設情況下,所有的iPhone程式都會運行在他們原始的螢幕大小320x480(非全屏狀態),如果你想讓你的程式運行在iPad上,且為全屏狀態,你需要修改項目設定你們的Targeted Device Family選為iPhone/iPad(這種模式使你的程式可以自動檢測啟動並執行裝置類型,並使你的程式全螢幕顯示)。
- 將iPhone啟動並執行iOS版本切換到iPad啟動並執行版本。(當前iPhone iOS系統版本為4.1,iPad為3.2)。
- 修改目標裝置族(Build裡面的Targeted Device Family選為iPhone/iPad )。
現在可以使你的程式運行在iPad上了。但是,你會看到你的介面(UI)和iPhone下面完全一樣,這不是我們需要的。所以,重新布局你的Views是程式員的責任,即重定位(reposition)Views。
首先,我們需要手工檢測啟動並執行裝置類型。(使用先行編譯命令)
#if(__IPHONE_OS_VERSION_MAX_ALLOWED>=30200)
NSString *str;
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad){
//iPad 版本代碼;
}
else
//iPhone/iPod touch 版本代碼;
#endif
或者
#define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)。UI_USER_INTERFACE_IDIOM()方法傳回值UIUserInterfaceIdiomPhone或UIUserInterfaceIdiomPad。
方法二 建立通用類型程式(兩套代碼及XIB介面檔案,兩套代碼及介面互不相干)
上一種方法的缺點是,你必須自己寫兩個版本(iPhone/iPod 和iPad)的代碼來適配不同的平台,同時要動態修改UI布局(及控制項尺寸等),是挑戰,但也很痛苦。所以,Apple建議你建立“Universal”,即通用型的應用。這樣的應用可以在iPhone和iPad下面運行。這需要為各個平台建立相應的.h,.m和.xib檔案。後台業務代碼自然要寫在相應版本的.h,.m檔案裡面。
- 升級項目的裝置目標到iPad。實質上,這裡Xcode把項目的Targeted Device Family 設定修改成了iPhone/iPad。Xcode會建立MainWindow.xib檔案的副本,並命名為MainWindow-iPad.xib。這時,這兩個檔案都包含“projectname”ViewController這個ViewController。如:
- 添加新的對應iPad版本的xib檔案到Resource-iPad檔案夾。命名規範:“iPad‘功能’ViewController.xib”(或者‘功能’ViewController-iPad.xib”),產生.h,.m,.xib檔案。並將這些iPad版本的xxViewController串連到MainWindow-iPad.xib(和正常的iPhone版本一樣)。
- 這樣,選擇不同的模擬器(Simulator)就可以看到同一套代碼處理過的相應版本的介面效果。
- 註:首先選擇Upgrade the Device Target For iPad ,這裡Xcode把項目的Targeted Device Family 設定修改成了iPhone/iPad。MainWindow.xib和MainWindow-iPad.xib作為兩個版本的入口,其他相應版本的ViewController串連到自己的MainWindow(-iPad).xib檔案即可。
- 看到的效果是:
- 方法三 維護兩套UI庫(一套代碼及兩套XIB介面檔案,兩套介面公用一套代碼)
這種情況下,你會得到兩個可執行體(executables),一個for iPhone/iPod touch,一個 for iPad。
- 建立iPhone的應用,升級到iPad相容。方法同二,不同的是,方法二選的是One Universal application,而這裡選的是Two device-specific applications。
這樣的話,與方法二建立相應的-iPad版本檔案不同的是,這裡是將iPhone版本的檔案直接拷貝進Resource-iPad檔案夾,檔案名稱一樣。代碼只需要一份,只不過需要把Resource和Resource-iPad檔案夾下的xxViewController的File's Owner都設定為Classes檔案夾裡面的同一個xxViewController類就可以了,其他介面UI元素設定串連到File's Owner。同時,會產生兩個版本的可執行體(executables),“projectname”.app和“projectname”-Upgraded.app。
看到的效果是:同一套代碼處理過的相同結果的介面。
總結:由於實際項目後台產生控制項,尤其是TableView會比較多,為了適應iPhone和iPad,可以考慮用第三種方法,一套代碼,兩套XIB介面。後台載入時,用:
if(isiPad){
UITableViewController *tableViewController=[[UITableViewController alloc] initWithNibName:@"iPadxxViewController" bundle:nil];
}
else {
UITableViewController *tableViewController=[[UITableViewController alloc] initWithNibName:@"iPhonexxViewController" bundle:nil];
}
即可。iPadxxViewController和iPhonexxViewController分別代表相應的iPadxxViewController.xib和iPhonexxViewController.xib檔案。
希望對大家有用。
聲明:總結以上內容來自外文教程翻譯,本人對本篇文章的所有權僅限於最後的總結部分。