2010年6月15日 星期二

如何撰寫 iPhone 及 iPad 共用的 Universal 版本的 App

http://richielin-programer.blogspot.com/2010/06/iphone-ipad-universal-app.html

首先先了解一件事
iPhone 和 iPad 目前的版本分別為 3.1.3 及 3.2 (天秤寫這篇文章的當下)
而兩者的解析度分為 768*1024 和 320*480
因為解析度的大小的差異
讓一款 App 要在不同平台運行,似乎是重新撰寫符合的解析度比較好
或是直接讓同一款 App 可以同時支援兩個不同平台也是不錯的選擇
雖然 App 可以編譯成 Universal 的版本
不過不代表程式碼就可以寫一次同時通吃兩邊
大部份的情況下,還是得依 iPhone 或是 iPad 的解析度來做修改
甚至是重新撰寫程式碼

1. 修改成支援 Universal 版本

在選單的 Project >Edit Project Settings 設定為 iPhone/iPad
iPhone OS 版本 Base SDK 可以設為 3.0 或 3.1

螢幕快照 2010-06-15 下午4.55.00.png

2. 判斷不同的平台,載入不同的 xib

因為 iPhone 和 iPad 的解析度不同
所以如果用 Interface Builder 建立的 xib 也必須依不同平台來製作
例如

MainViewController.xib (for iPhone)
MainViewControllerHD.xib (for iPad)

然後程式判斷目前運行的平台,載入不同的 xib
UI_USER_INTERFACE_IDIOM() 這個巨集,可以用來判斷目前是哪個平台
但是有個問題,這個巨集是 v3.2 以上台有定義
所以我們可以另外再做個函式來讓 V3.0 以上的版本都可以正確判斷

-(bool) isIpad

{

BOOL iPad = NO;

#ifdef UI_USER_INTERFACE_IDIOM

iPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);

#endif

return iPad;

}

 最後在載入 xib 的程式碼中,加入判斷式

 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

// Override point for customization after app launch

if ([selfisIpad] == TRUE)

[windowaddSubview:mainViewControllerHD.view];

else

[windowaddSubview:mainViewController.view];

[windowmakeKeyAndVisible];

returnYES;

}

 

iPhone 執行結果

螢幕快照 2010-06-15 下午5.08.18.png

iPad 執行結果

螢幕快照 2010-06-15 下午5.08.34.png

1 意見:

我累了 提到...

冒昧的請問 那麼設計師在設計給universal的app圖檔 是要用iphone4的高解析下去設計嗎? 還是說要製作兩種解析度的圖呢? 謝謝