2010年10月13日 星期三

iPhone/iPad start apps with specific orientation and device detection

好久沒po筆記了,只能說俺的惰性實在是太容易復發了
一般來說iPhone跟iPad一執行程式起來都是直立狀態
(PortraitOrientation)

如果想指定啟動後就是橫著的方向,設定的方式如下:
1. 因為是app一開始執行就要做的動作,
   所以設定也是在一開始的ViewController裡面
    {ProjectName}ViewController.m  -->
    - (BOOL)shouldAutorotateToInterfaceOrientation:
            (UIInterfaceOrientation)interfaceOrientation

2. 修改並指定interfaceOrientation朝左或右
   return YES;
   return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
   or
   return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);

   補充說明一下 return YES的作法:
   device會參考plist中的Supported interface orientations欄位,
   有指定到的方向device會自己做旋轉動作.

   另外,UIInterfaceOrientationLandscape與UIDeviceOrientationLandscape
   的方向是剛好相反的(這特性可以被作為一些判斷依據)

3. 在參考資料的過程中,有這樣的需求是程式在iPhone跟iPad起始的方向要不同
   一樣是在原處動手腳,加上一些判斷式就能夠分辨device種類了.
   BOOL iPad = NO;
#ifdef UI_USER_INTERFACE_IDIOM
   iPad = (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
#endif
   if (iPad) {
      // 條件成立表示device為iPad,執行環境iOS3.2以上
   } else {
      // 條件不成立有兩種可能1.device是iPhone或iPod
      // 2.執行環境iOS3.2以前版本不支援UI_USER_INTERFACE_IDIOM
   }

有興趣可以看一下UI_USER_INTERFACE_IDIOM在UIDevice.h的定義
目前我執行起來沒有什麼問題~
網路上有很多討論,如果是universal apps又是another story了:)

很開心在網路上開始看到有人site我的文章了耶~
但是可以請好心的註明一下出處嗎?

參考資料: JEFF LAMARCHE's blogger
               UIDevice Class Reference
               Ole Begemann's blogger
               Sangraal at Programbles
               BillyGiggles at iphonedevsdk


2011/01/03 補充:
iOS version detection

既然有偵測device 型號的方法
iOS版本的偵測當然也不能缺席

#ifdef __IPHONE_3_0
// works on >= iOS 3.0
#else
// works on < iOS 3.0
#end



float ver = [[[UIDevice currentDevice] systemVersion] floatValue];
if (ver >= 3.0) {
    // Only executes on version 3 or above.
}
資料來源:stackoverflow

內容回應