開(kāi)發(fā)者必看:iOS7 SDK新特性一覽
全新UI設(shè)計(jì)
iOS7最大的變化莫過(guò)于UI設(shè)計(jì),也許你會(huì)說(shuō)UI設(shè)計(jì)“這是設(shè)計(jì)師大大們應(yīng)該關(guān)注的事情,不關(guān)開(kāi)發(fā)者的事,我們只需要替換圖片就行了”。那你就錯(cuò)了。 UI的變化必然帶來(lái)使用習(xí)慣和方式的轉(zhuǎn)變,如何運(yùn)用iOS7的UI,如何是自己的應(yīng)用更切合新的系統(tǒng),都是需要考慮的事情。另外值得注意的是,使用 iOS7 SDK(現(xiàn)在只有Xcode5預(yù)覽版提供)打包的應(yīng)用在iOS7上運(yùn)行時(shí)將會(huì)自動(dòng)使用iOS7的新界面,所以原有應(yīng)用可能需要對(duì)新界面進(jìn)行重大調(diào)整。具體 的iOS7中所使用的UI元素的人際交互界面文檔,可以從這里找到(應(yīng)該是需要開(kāi)發(fā)者賬號(hào)才能看)。
簡(jiǎn)單總結(jié)來(lái)說(shuō),以現(xiàn)在上手體驗(yàn)看來(lái)新的UI變化改進(jìn)有如下幾點(diǎn):
1.狀態(tài)欄,導(dǎo)航欄和應(yīng)用實(shí)際展示內(nèi)容不再界限:系統(tǒng)自帶的應(yīng)用都不再區(qū)分狀態(tài)欄和navigation bar,而是用統(tǒng)一的顏色力求簡(jiǎn)潔。這也算是一種趨勢(shì)。
2.BarItem的按鈕全部文字化:這點(diǎn)做的相當(dāng)堅(jiān)決,所有的導(dǎo)航和工具條按鈕都取消了擬物化,原來(lái)的文字(比如“Edit”,“Done”之類)改為了簡(jiǎn)單的文字,原來(lái)的圖標(biāo)(比如新建或者刪除)也做了簡(jiǎn)化。
3.程序打開(kāi)加入了動(dòng)畫(huà):從主界面到圖標(biāo)所在位置的一個(gè)放大,同時(shí)顯示應(yīng)用的載入界面。
自己實(shí)驗(yàn)了幾個(gè)現(xiàn)有的AppStore應(yīng)用在iOS7上的運(yùn)行情況:
1.Pomodoro Do: 這是我自己開(kāi)發(fā)的應(yīng)用,運(yùn)行正常,但是因?yàn)椴皇莍OS7 SDK打包,所以在UI上使用了之前系統(tǒng)的,問(wèn)題是導(dǎo)航欄Tint顏色丟失,導(dǎo)致很難看,需要盡快更新。
2.Facebook:因?yàn)槭褂昧藞D片自定義導(dǎo)航欄,而沒(méi)有直接使用系統(tǒng)提供的材質(zhì),所以沒(méi)什么問(wèn)題。
3.面包旅行:直接Crash,無(wú)法打開(kāi),原因未知。
這次UI大改可以說(shuō)是一次對(duì)敏捷開(kāi)發(fā)的檢驗(yàn),原來(lái)的應(yīng)用(特別是擬物化用得比較重的應(yīng)用)雖然也能運(yùn)行,但是很多UI自定義的地方需要更改不說(shuō),還 容易讓用戶產(chǎn)生一種“來(lái)到了另一個(gè)世界”的感覺(jué),同時(shí)可以看到也有部分應(yīng)用無(wú)法運(yùn)行。而對(duì)于蘋(píng)果的封閉系統(tǒng)和只升不降的特性,開(kāi)發(fā)者以及其應(yīng)用必須要盡快 適應(yīng)這個(gè)新系統(tǒng),這對(duì)于迭代快速,還在繼續(xù)維護(hù)的應(yīng)用來(lái)說(shuō)會(huì)是一個(gè)機(jī)會(huì)。相信誰(shuí)先能適應(yīng)新的UI,誰(shuí)就將在iOS7上占到先機(jī)。
動(dòng)態(tài)UIKit
新增了UIDynamicItem委托,用來(lái)為UIView制定動(dòng)態(tài)行為,當(dāng)然其他任何對(duì)象都能通過(guò)實(shí)現(xiàn)這組接口來(lái)定義動(dòng)態(tài)行為,只不過(guò)在UIKit中可 能應(yīng)用最多。所謂動(dòng)態(tài)行為,是指將現(xiàn)實(shí)世界的行為或者特性引入到UI中,比如重力等。通過(guò)實(shí)現(xiàn)UIDynamicItem,UIKit現(xiàn)在支持如下行為: * UIAttachmentBehavior 連接兩個(gè)實(shí)現(xiàn)了UIDynamicItem的物體(以下簡(jiǎn)稱動(dòng)態(tài)物體),一個(gè)物體移動(dòng)時(shí),另一個(gè)跟隨移動(dòng) * UICollisionBehavior 指定邊界,使兩個(gè)動(dòng)態(tài)物體可以進(jìn)行碰撞 * UIGravityBehavior 顧名思義,為動(dòng)態(tài)物體增加重力模擬 * UIPushBehavior 為動(dòng)態(tài)物體施加持續(xù)的力 * UISnapBehavior 為動(dòng)態(tài)物體指定一個(gè)附著點(diǎn),想象一下類似掛一幅畫(huà)在圖釘上的感覺(jué)。
如果有開(kāi)發(fā)游戲的童鞋可能會(huì)覺(jué)得這些很多都是做游戲時(shí)候的需求,一種box2d之類的2D物理引擎的既視感躍然而出。沒(méi)錯(cuò)的親,動(dòng)態(tài)UI,加上之后 要介紹的Sprite Kit,極大的擴(kuò)展了使用UIKit進(jìn)行游戲開(kāi)發(fā)的可能性。另外要注意UIDynamicItem不僅適用于UIKit,任何對(duì)象都可以實(shí)現(xiàn)接口來(lái)獲得動(dòng) 態(tài)物體的一些特性,所以說(shuō)用來(lái)做一些3D的事情也不是沒(méi)有可能。如果覺(jué)得Cocos2D+box2d這樣的組合使用起來(lái)不方便的話,現(xiàn)在動(dòng)態(tài) UIKit+SpriteKit給出了新的選擇。
游戲方面
iOS7 SDK極大加強(qiáng)了直接使用iOS SDK制作和分發(fā)游戲的體驗(yàn),最主要的是引入了專門(mén)的游戲制作框架。
Sprite Kit Framework
這是個(gè)人認(rèn)為iOS7 SDK最大的亮點(diǎn),也是最重要的部分,iOS SDK終于有自己的精靈系統(tǒng)了。Sprite Kit Framework使用硬件加速的動(dòng)畫(huà)系統(tǒng)來(lái)表現(xiàn)2D和2.5D的游戲,它提供了制作游戲所需要的大部分的工具,包括圖像渲染,動(dòng)畫(huà)系統(tǒng),聲音播放以及圖 像模擬的物理引擎??梢哉f(shuō)這個(gè)框架是iOS SDK自帶了一個(gè)較完備的2D游戲引擎,力圖讓開(kāi)發(fā)者專注于更高層的實(shí)現(xiàn)和內(nèi)容。和大多數(shù)游戲引擎一樣,Sprite Kit內(nèi)的內(nèi)容都按照?qǐng)鼍埃⊿cene)來(lái)分開(kāi)組織,一個(gè)場(chǎng)景可以包括貼圖對(duì)象,視頻,形狀,粒子效果甚至是CoreImage濾鏡等等。相對(duì)于現(xiàn)有的 2D引擎來(lái)說(shuō),由于Sprite Kit是在系統(tǒng)層級(jí)進(jìn)行的優(yōu)化,渲染時(shí)間等都由框架決定,因此應(yīng)該會(huì)有比較高的效率。
另外,Xcode還提供了創(chuàng)建粒子系統(tǒng)和貼圖Atlas的工具。使用Xcode來(lái)管理粒子效果和貼圖atlas,可以迅速在Sprite Kit中反應(yīng)出來(lái)。
Game Controller Framework
為Made-for-iPhone/iPod/iPad (MFi) game controller設(shè)計(jì)的硬件的對(duì)應(yīng)的框架,可以讓用戶用來(lái)連接和控制專門(mén)的游戲硬件。參考WWDC 2013開(kāi)場(chǎng)視頻中開(kāi)始的賽車演示?,F(xiàn)在想到的是,也許這貨不僅可以用于游戲…或者蘋(píng)果之后會(huì)擴(kuò)展其應(yīng)用,因?yàn)槭褂闷占奥屎芨叩膇Phone作為物聯(lián)網(wǎng)的 入口,似乎會(huì)是很有前途的事情。
GameCenter改進(jìn)
GameCenter一直是蘋(píng)果的敗筆…雖然每年都在改進(jìn),但是一直沒(méi)看到大的起色。今年也不例外,都是些小改動(dòng),不提也罷。
多任務(wù)強(qiáng)化
經(jīng)常需要下載新內(nèi)容的應(yīng)用現(xiàn)在可以通過(guò)設(shè)置UIBackgroundModes為fetch來(lái)實(shí)現(xiàn)后臺(tái)下載內(nèi)容了,需要在AppDelegate里實(shí)現(xiàn)setMinimumBackgroundFetchInterval:以及application:performFetchWithCompletionHandler:來(lái)處理完成的下載,這個(gè)為后臺(tái)運(yùn)行代碼提供了又一種選擇。不過(guò)考慮到Apple如果繼續(xù)嚴(yán)格審核的話,可能只有雜志報(bào)刊類應(yīng)用能夠取得這個(gè)權(quán)限吧。另外需要注意開(kāi)發(fā)者僅只能指定一個(gè)最小間隔,最后下沒(méi)下估計(jì)就得看系統(tǒng)娘的心情了。
同樣是后臺(tái)下載,以前只能推送提醒用戶進(jìn)入應(yīng)用下載,現(xiàn)在可以接到推送并在后臺(tái)下載。UIBackgroundModes設(shè)為remote-notification,并實(shí)現(xiàn)application:didReceiveRemoteNotification:fetchCompletionHandler:
為后臺(tái)下載,開(kāi)發(fā)者必須使用一個(gè)新的類NSURLSession,其實(shí)就是在NSURLConnection上加了個(gè)后臺(tái)處理,使用類似,API十分簡(jiǎn)單,不再贅述。
AirDrop
這個(gè)是iOS7的重頭新功能,用戶可以用它來(lái)分享照片,文檔,鏈接,或者其他數(shù)據(jù)給附近的設(shè)備。但是不需要特別的實(shí)現(xiàn),被集成在了標(biāo)準(zhǔn)的 UIActivityViewController里,并沒(méi)有單獨(dú)的API提供。數(shù)據(jù)的話,可以通過(guò)實(shí)現(xiàn)UIActivityItemSource接口后 進(jìn)行發(fā)送。大概蘋(píng)果也不愿意看到超出他們控制的文件分享功能吧,畢竟這和iOS設(shè)計(jì)的初衷不一樣。如果你不使用 UIActivityViewController的話,可能是無(wú)法在應(yīng)用里實(shí)裝AirDrop功能了。
地圖
Apple在繼續(xù)在地圖應(yīng)用上的探索,MapKit的改進(jìn)也乏善可陳。我一直相信地圖類應(yīng)用的瓶頸一定在于數(shù)據(jù),但是對(duì)于數(shù)據(jù)源的建立并不是一年兩年能夠完成的。
Google在這一塊憑借自己的搜索引擎有著得天獨(dú)厚的優(yōu)勢(shì),蘋(píng)果還差的很遠(yuǎn)很遠(yuǎn)??纯从心男┬聳|西吧:
1.MKMapCamera,可以將一個(gè)MKMapCamera對(duì)象添加到地圖上,在指明位置,角度和方向后將呈現(xiàn)3D的樣子…大概可以想象成一個(gè)數(shù)字版的Google街景..
2.MKDirections 獲取Apple提供的基于方向的路徑,然后可以用來(lái)將路徑繪制在自己的應(yīng)用中。這可能對(duì)一些小的地圖服務(wù)提供商產(chǎn)生沖擊,但是還是那句話,地圖是一個(gè)數(shù)據(jù) 的世界,在擁有完備數(shù)據(jù)之前,Apple不是Google的對(duì)手。這個(gè)狀況至少會(huì)持續(xù)好幾年(也有可能是永遠(yuǎn))。
3.MKGeodesicPolyline 創(chuàng)建一個(gè)隨地球曲率的線,并附加到地圖上,完成一些視覺(jué)效果。
4.MKMapSnapshotter 使用其拍攝基于地圖的照片,也許各類簽到類應(yīng)用會(huì)用到。
5.改變了overlay物件的渲染方式。
Inter-App Audio 應(yīng)用間的音頻
AudioUnit框架中加入了在同一臺(tái)設(shè)備不同應(yīng)用之間發(fā)送MIDI指令和傳送音頻的能力。比如在一個(gè)應(yīng)用中使用AudioUnit錄音,然后在另一個(gè) 應(yīng)用中打開(kāi)以處理等。在音源應(yīng)用中聲明一個(gè)AURemoteIO實(shí)例來(lái)標(biāo)為Inter-App可用,在目標(biāo)應(yīng)用中使用新的發(fā)現(xiàn)接口來(lái)發(fā)現(xiàn)并獲取音頻。 想法很好,也算是在應(yīng)用內(nèi)共享邁出了一步,不過(guò)我對(duì)現(xiàn)在使用AudioUnit這樣的低層級(jí)框架的應(yīng)用數(shù)量表示不樂(lè)觀。也許今后會(huì)有一些為更高層級(jí)設(shè)計(jì)的 共享API提供給開(kāi)發(fā)者使用。畢竟要從AudioUnit開(kāi)始處理音頻對(duì)于大多數(shù)開(kāi)發(fā)者來(lái)說(shuō)并不是一件很容易的事情。
點(diǎn)對(duì)點(diǎn)連接 Peer-to-Peer Connectivity
可以看成是AirDrop不能直接使用的補(bǔ)償,代價(jià)是需要自己實(shí)現(xiàn)。MultipeerConnectivity框架可以用來(lái)發(fā)現(xiàn)和連接附近的設(shè)備,并傳 輸數(shù)據(jù),而這一切并不需要有網(wǎng)絡(luò)連接。可以看到Apple逐漸在文件共享方面一步步放開(kāi)限制,但是當(dāng)然所有這些都還是被限制在sandbox里的。
Store Kit Framework
Store Kit在內(nèi)購(gòu)方面采用了新的訂單系統(tǒng),這將可以實(shí)現(xiàn)對(duì)訂單的本機(jī)驗(yàn)證。這是一次對(duì)應(yīng)內(nèi)購(gòu)破解和有可能驗(yàn)證失敗導(dǎo)致內(nèi)購(gòu)失敗的更新,蘋(píng)果希望藉此減少內(nèi)購(gòu)的 實(shí)現(xiàn)流程,減少出錯(cuò),同時(shí)遏制內(nèi)購(gòu)破解泛濫。前者可能沒(méi)有問(wèn)題,但是后者的話,因?yàn)閛bjc的動(dòng)態(tài)特性,決定了只要有越獄存在,內(nèi)購(gòu)破解也是早晚的事情。 不過(guò)這一點(diǎn)確實(shí)方便了沒(méi)有能力架設(shè)驗(yàn)證服務(wù)器的小開(kāi)發(fā)者,這方面來(lái)說(shuō)還是很好的。
最后
當(dāng)然還有一些其他小改動(dòng),包括MessageUI里添加了附件按鈕,Xcode開(kāi)始支持模塊了等等。完整的iOS7新特性列表可以在這里找到(暫時(shí) 應(yīng)該也需要開(kāi)發(fā)者賬號(hào))。最后一個(gè)好消息是,蘋(píng)果放慢了廢棄API的速度,這個(gè)版本并沒(méi)有特別重要的API被標(biāo)為Deprecated,Cheers。