舊工程適配iOS6和iPhone5的一些故事

 蘋果每發佈一個系統,都夠開發者忙活一陣的,更新xcode適配新系統:iOS4支持Retain需要@2x的圖;iOS5不支持udid;像現在的iOS6iPhone5要面對的下面的一堆問題。
1.
添加Retina 4 launch p_w_picpath,運行工程的時候會主動提示你。
這時候直接點Add就好了。會默認添加一張[email protected]的黑圖:

不添加的話,程序運行起來會上下有黑邊兒的喲

添加完以後的效果

這個地方再囉嗦兩句:當透明第一次在羣裏說要添加這麼一張圖的時候,我的第一反應是:那不是程序啓動的時候會有一張黑圖麼?而我的程序是不需要啓動圖的。而當自已添加這張圖的時候才發現,這個擔心是多餘的。估計蘋果自已做了什麼優化,判斷出來是黑圖的時候就直接給跳過了。
2.Group Table View Background Color is Deprecated in iOS 6.0

在使用背景色的時候,我最喜歡用的一個系統自帶的顏色就是:"Group Table View Background Color"。現在既然這個顏色消失了,換個別的顏色就好嘍。
3.
關於多個Target
我們知道添加圖片的時候,會直接添加到工具裏,這時候如果有多個Target的時候,直接將[email protected]文件,拖拽到相應的"Copy Bundle Resources"裏就好了。

再有要注意的就是多個Target在模擬器運行的時候,現在不像原來那麼方便,直接切換配置文件就可以運行了。需要在測試不同Target表示的時候,除了切換配置文件還需要清空模擬器,不然不好使喲~
4.xcode4.5
不再支持armv6:iOS4.3.3以下的系統.
不被支持的硬件設備包括:iPod 2nd gen, iPhone 3G 或更老的iPhone
例如我打包時的錯誤提示就是:

?

1

2

warning: iOS deployment targets lower than 4.3 are not supported (current IPHONEOS_DEPLOYMENT_TARGET = "4.0", ARCHS = "armv7").

(null):  iPhone/iPod Touch: application executable is missing a required architecture.  At least one of the following architecture(s) must be present: armv6 (-19033)


因爲喜歡用Block,所以我開發的東東,一般最低都支持iOS4.0,看來是蘋果逼着開發者和用戶升級啊。
5.
奉上一段判斷iPhone的代碼

?

1

#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)


用時候直接

?

1

if (iPhone5) ooxx


就可以了。
另外,如果代碼寫界面的話,在iPhone5View的高是568~
6.
關於xib自適應的問題
默認的話,如果你的界面上包含scrollview/TableView的話,這個界面基本上是不用改的,因爲中間部分會自動拉伸。如果不包含這兩個全屏的控件的話,怕是要自已再添加一個專門針對iPhone5xib了。辦法很簡單,新建一個xib文件,將裏面viewsize設置成Retina 4 Full Screen就可以了。上面已經提到怎麼判斷iPhone5了,怎樣讀取不同的xib文件不用上代碼了吧?
7.
關於屏幕旋轉(iOS5的時候就出過一次狀況,這次又來)
要深入理解這個問題,還需要您自已親自做一些實驗,iOS6取消了一個api,增加了兩個api,但是這一去一加滿足不了我的情況:應用在所有的界面都是豎屏,只在一個屏幕是橫屏。就這一個情況要實現費了我半天的功夫。只說一下我最後怎麼實現的。
首先:這橫屏的xib裏面的view就是橫的
其次:屏幕適應只支持橫屏

?

1

2

3

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{

  return UIInterfaceOrientationIsLandscape(interfaceOrientation);

}


第三:在這個viewpresent出來的
第四:viewDidLoad裏隱藏狀態欄

?

1

2

3

4

5

6

- (void)viewDidLoad{

  if (IOSSystemVersion >= 5.0) {

    //5.0及以後,不整這個,界面錯位 整這個帶動畫的話,容易看到一個白頭

    [[UIApplication sharedApplication] setStatusBarHidden:YES];

  }

}


第五:viewWillAppear自已將view旋轉90

?

1

2

3

4

5

6

7

8

9

10

11

12

13

- (void)viewWillAppear:(BOOL)animated{

  [super viewWillAppear:animated];

  [UIView animateWithDuration:0.0f

                   animations:^{

                     [self.view setTransform: CGAffineTransformMakeRotation(M_PI / 2)];

                     if (iPhone5) {

                       self.view.frame = CGRectMake(0, 0, 568, 320);

                     }

                     else{

                       self.view.frame = CGRectMake(0, 0, 480, 320);

                     }

                   }];

}



暫時先記錄這麼多了,其它還有一些小問題,會陸續發出來,對了如果你好奇上面的模擬器爲什麼有Home鍵記得看下這篇兒文章喲:
關於iOS模擬器沒有Home鍵的一些新認識

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章