iPhone 移植到 iPad:

來源: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文件。程序員