來源:http://www.wapera.cn/ipadkaifa/71354.htmlhtml
iPhone移植到iPad:
方法一修改設備目標設置(普通模式:一套代碼及XIB界面文件,代碼分if和else來分別處理多種設備)
默認狀況下,全部的iPhone程序都會運行在他們原始的屏幕大小320x480(非全屏狀態),若是你想讓你的程序運行在iPad上,且爲全屏狀態,你須要修改項目設置大家的TargetedDeviceFamily選爲iPhone/iPad(這種模式使你的程序能夠自動檢測運行的設備類型,並使你的程序全屏顯示)。
將iPhone運行的iOS版本切換到iPad運行的版本。(當前iPhoneiOS系統版本爲4.1,iPad爲3.2)。
修改目標設備族(Build裏面的TargetedDeviceFamily選爲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/iPodtouch版本代碼;
#endif
或者
#defineisPad(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把項目的TargetedDeviceFamily設置修改爲了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)就能夠看到同一套代碼處理過的相應版本的界面效果。
注:首先選擇UpgradetheDeviceTargetForiPad,這裏Xcode把項目的TargetedDeviceFamily設置修改爲了iPhone/iPad。MainWindow.xib和MainWindow-iPad.xib做爲兩個版本的入口,其餘相應版本的ViewController鏈接到本身的MainWindow(-iPad).xib文件便可。
看到的效果是:
▪方法三維護兩套UI庫(一套代碼及兩套XIB界面文件,兩套界面公用一套代碼)
這種狀況下,你會獲得兩個可執行體(executables),一個foriPhone/iPodtouch,一個foriPad。
創建iPhone的應用,升級到iPad兼容。方法同二,不一樣的是,方法二選的是OneUniversalapplication,而這裏選的是Twodevice-specificapplications。
這樣的話,與方法二創建相應的-iPad版本文件不一樣的是,這裏是將iPhone版本的文件直接拷貝進Resource-iPad文件夾,文件名稱同樣。代碼只須要一份,只不過須要把Resource和Resource-iPad文件夾下的xxViewController的File'sOwner都設置爲Classes文件夾裏面的同一個xxViewController類就能夠了,其餘界面UI元素設置鏈接到File'sOwner。同時,會產生兩個版本的可執行體(executables),「projectname」.app和「projectname」-Upgraded.app。
看到的效果是:同一套代碼處理過的相同結果的界面。
總結:因爲實際項目後臺生成控件,尤爲是TableView會比較多,爲了適應iPhone和iPad,能夠考慮用第三種方法,一套代碼,兩套XIB界面。後臺加載時,用:
if(isiPad){
UITableViewController*tableViewController=[[UITableViewControlleralloc]initWithNibName:@"iPadxxViewController"bundle:nil];
}
else{
UITableViewController*tableViewController=[[UITableViewControlleralloc]initWithNibName:@"iPhonexxViewController"bundle:nil];
}
便可。iPadxxViewController和iPhonexxViewController分別表明相應的iPadxxViewController.xib和iPhonexxViewController.xib文件。程序員