iPhone 移植到 iPad

來源:互聯網
上載者:User

 

iPhone 移植到 iPad:

 

  • 方法一 修改裝置目標設定(普通模式:一套代碼及XIB介面檔案,代碼分if和else來分別處理多種裝置)

預設情況下,所有的iPhone程式都會運行在他們原始的螢幕大小320x480(非全屏狀態),如果你想讓你的程式運行在iPad上,且為全屏狀態,你需要修改項目設定你們的Targeted Device Family選為iPhone/iPad(這種模式使你的程式可以自動檢測啟動並執行裝置類型,並使你的程式全螢幕顯示)。

  1. 將iPhone啟動並執行iOS版本切換到iPad啟動並執行版本。(當前iPhone iOS系統版本為4.1,iPad為3.2)。
  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檔案裡面。

  1. 升級項目的裝置目標到iPad。實質上,這裡Xcode把項目的Targeted Device Family 設定修改成了iPhone/iPad。Xcode會建立MainWindow.xib檔案的副本,並命名為MainWindow-iPad.xib。這時,這兩個檔案都包含“projectname”ViewController這個ViewController。如:
  2. 添加新的對應iPad版本的xib檔案到Resource-iPad檔案夾。命名規範:“iPad‘功能’ViewController.xib”(或者‘功能’ViewController-iPad.xib”),產生.h,.m,.xib檔案。並將這些iPad版本的xxViewController串連到MainWindow-iPad.xib(和正常的iPhone版本一樣)。
  3. 這樣,選擇不同的模擬器(Simulator)就可以看到同一套代碼處理過的相應版本的介面效果。

 

  1. 註:首先選擇Upgrade the Device Target For iPad ,這裡Xcode把項目的Targeted Device Family 設定修改成了iPhone/iPad。MainWindow.xib和MainWindow-iPad.xib作為兩個版本的入口,其他相應版本的ViewController串連到自己的MainWindow(-iPad).xib檔案即可。
  2. 看到的效果是:
  3. 方法三 維護兩套UI庫(一套代碼及兩套XIB介面檔案,兩套介面公用一套代碼)

這種情況下,你會得到兩個可執行體(executables),一個for  iPhone/iPod touch,一個 for iPad。

  1. 建立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檔案。

希望對大家有用。

聲明:總結以上內容來自外文教程翻譯,本人對本篇文章的所有權僅限於最後的總結部分。

 

 

 

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.