天天看點

IOS7開發者必須知道的新特性

全新UI設計

iOS7最大的變化莫過于UI設計,也許你會說UI設計“這是設計師大大們應該關注的事情,不關開發者的事,我們隻需要替換圖檔就行了”。那你就錯了。UI的變化必然帶來使用習慣和方式的轉變,如何運用iOS7的UI,如何是自己的應用更切合新的系統,都是需要考慮的事情。另外值得注意的是,使用iOS7 SDK(現在隻有Xcode5預覽版提供)打包的應用在iOS7上運作時将會自動使用iOS7的新界面,是以原有應用可能需要對新界面進行重大調整。具體的iOS7中所使用的UI元素的人際互動界面文檔,可以從這裡找到(應該是需要開發者賬号才能看)。

簡單總結來說,以現在上手體驗看來新的UI變化改進有如下幾點:

1.狀态欄,導航欄和應用實際展示内容不再界限:系統自帶的應用都不再區分狀态欄和navigation bar,而是用統一的顔色力求簡潔。這也算是一種趨勢。

2.BarItem的按鈕全部文字化:這點做的相當堅決,所有的導航和工具條按鈕都取消了拟物化,原來的文字(比如“Edit”,“Done”之類)改為了簡單的文字,原來的圖示(比如建立或者删除)也做了簡化。

3.程式打開加入了動畫:從主界面到圖示所在位置的一個放大,同時顯示應用的載入界面。

自己實驗了幾個現有的AppStore應用在iOS7上的運作情況:

1.Pomodoro Do: 這是我自己開發的應用,運作正常,但是因為不是iOS7 SDK打包,是以在UI上使用了之前系統的,問題是導航欄Tint顔色丢失,導緻很難看,需要盡快更新。

2.Facebook:因為使用了圖檔自定義導航欄,而沒有直接使用系統提供的材質,是以沒什麼問題。

3.面包旅行:直接Crash,無法打開,原因未知。

這次UI大改可以說是一次對靈活開發的檢驗,原來的應用(特别是拟物化用得比較重的應用)雖然也能運作,但是很多UI自定義的地方需要更改不說,還容易讓使用者産生一種“來到了另一個世界”的感覺,同時可以看到也有部分應用無法運作。而對于蘋果的封閉系統和隻升不降的特性,開發者以及其應用必須要盡快适應這個新系統,這對于疊代快速,還在繼續維護的應用來說會是一個機會。相信誰先能适應新的UI,誰就将在iOS7上占到先機。

動态UIKit

新增了UIDynamicItem委托,用來為UIView制定動态行為,當然其他任何對象都能通過實作這組接口來定義動态行為,隻不過在UIKit中可能應用最多。所謂動态行為,是指将現實世界的行為或者特性引入到UI中,比如重力等。通過實作UIDynamicItem,UIKit現在支援如下行為:

* UIAttachmentBehavior 連接配接兩個實作了UIDynamicItem的物體(以下簡稱動态物體),一個物體移動時,另一個跟随移動

* UICollisionBehavior 指定邊界,使兩個動态物體可以進行碰撞

* UIGravityBehavior 顧名思義,為動态物體增加重力模拟

* UIPushBehavior 為動态物體施加持續的力

* UISnapBehavior 為動态物體指定一個附着點,想象一下類似挂一幅畫在圖釘上的感覺。

如果有開發遊戲的童鞋可能會覺得這些很多都是做遊戲時候的需求,一種box2d之類的2D實體引擎的既視感躍然而出。沒錯的親,動态UI,加上之後要介紹的Sprite Kit,極大的擴充了使用UIKit進行遊戲開發的可能性。另外要注意UIDynamicItem不僅适用于UIKit,任何對象都可以實作接口來獲得動态物體的一些特性,是以說用來做一些3D的事情也不是沒有可能。如果覺得Cocos2D+box2d這樣的組合使用起來不友善的話,現在動态UIKit+SpriteKit給出了新的選擇。

遊戲方面

iOS7 SDK極大加強了直接使用iOS SDK制作和分發遊戲的體驗,最主要的是引入了專門的遊戲制作架構。

Sprite Kit Framework

這是個人認為iOS7 SDK最大的亮點,也是最重要的部分,iOS SDK終于有自己的精靈系統了。Sprite Kit Framework使用硬體加速的動畫系統來表現2D和2.5D的遊戲,它提供了制作遊戲所需要的大部分的工具,包括圖像渲染,動畫系統,聲音播放以及圖像模拟的實體引擎。可以說這個架構是iOS SDK自帶了一個較完備的2D遊戲引擎,力圖讓開發者專注于更高層的實作和内容。和大多數遊戲引擎一樣,Sprite Kit内的内容都按照場景(Scene)來分開組織,一個場景可以包括貼圖對象,視訊,形狀,粒子效果甚至是CoreImage濾鏡等等。相對于現有的2D引擎來說,由于Sprite Kit是在系統層級進行的優化,渲染時間等都由架構決定,是以應該會有比較高的效率。

另外,Xcode還提供了建立粒子系統和貼圖Atlas的工具。使用Xcode來管理粒子效果和貼圖atlas,可以迅速在Sprite Kit中反應出來。

Game Controller Framework

為Made-for-iPhone/iPod/iPad (MFi) game controller設計的硬體的對應的架構,可以讓使用者用來連接配接和控制專門的遊戲硬體。參考WWDC 2013開場視訊中開始的×××示範。現在想到的是,也許這貨不僅可以用于遊戲…或者蘋果之後會擴充其應用,因為使用普及率很高的iPhone作為物聯網的入口,似乎會是很有前途的事情。

GameCenter改進

GameCenter一直是蘋果的敗筆…雖然每年都在改進,但是一直沒看到大的起色。今年也不例外,都是些小改動,不提也罷。

多任務強化

經常需要下載下傳新内容的應用現在可以通過設定UIBackgroundModes為fetch來實作背景下載下傳内容了,需要在AppDelegate裡實作setMinimumBackgroundFetchInterval:以及application:performFetchWithCompletionHandler:來處理完成的下載下傳,這個為背景運作代碼提供了又一種選擇。不過考慮到Apple如果繼續嚴格稽核的話,可能隻有雜志報刊類應用能夠取得這個權限吧。另外需要注意開發者僅隻能指定一個最小間隔,最後下沒下估計就得看系統娘的心情了。

同樣是背景下載下傳,以前隻能推送提醒使用者進入應用下載下傳,現在可以接到推送并在背景下載下傳。UIBackgroundModes設為remote-notification,并實作application:didReceiveRemoteNotification:fetchCompletionHandler:

為背景下載下傳,開發者必須使用一個新的類NSURLSession,其實就是在NSURLConnection上加了個背景處理,使用類似,API十分簡單,不再贅述。

AirDrop

這個是iOS7的重頭新功能,使用者可以用它來分享照片,文檔,連結,或者其他資料給附近的裝置。但是不需要特别的實作,被內建在了标準的UIActivityViewController裡,并沒有單獨的API提供。資料的話,可以通過實作UIActivityItemSource接口後進行發送。大概蘋果也不願意看到超出他們控制的檔案分享功能吧,畢竟這和iOS設計的初衷不一樣。如果你不使用UIActivityViewController的話,可能是無法在應用裡實裝AirDrop功能了。

地圖

Apple在繼續在地圖應用上的探索,MapKit的改進也乏善可陳。我一直相信地圖類應用的瓶頸一定在于資料,但是對于資料源的建立并不是一年兩年能夠完成的。

Google在這一塊憑借自己的搜尋引擎有着得天獨厚的優勢,蘋果還差的很遠很遠。看看有哪些新東西吧:

1.MKMapCamera,可以将一個MKMapCamera對象添加到地圖上,在指明位置,角度和方向後将呈現3D的樣子…大概可以想象成一個數字版的Google街景..

2.MKDirections 擷取Apple提供的基于方向的路徑,然後可以用來将路徑繪制在自己的應用中。這可能對一些小的地圖服務提供商産生沖擊,但是還是那句話,地圖是一個資料的世界,在擁有完備資料之前,Apple不是Google的對手。這個狀況至少會持續好幾年(也有可能是永遠)。

3.MKGeodesicPolyline 建立一個随地球曲率的線,并附加到地圖上,完成一些視覺效果。

4.MKMapSnapshotter 使用其拍攝基于地圖的照片,也許各類簽到類應用會用到。

5.改變了overlay物件的渲染方式。

Inter-App Audio 應用間的音頻

AudioUnit架構中加入了在同一台裝置不同應用之間發送MIDI指令和傳送音頻的能力。比如在一個應用中使用AudioUnit錄音,然後在另一個應用中打開以處理等。在音源應用中聲明一個AURemoteIO執行個體來标為Inter-App可用,在目标應用中使用新的發現接口來發現并擷取音頻。 想法很好,也算是在應用内共享邁出了一步,不過我對現在使用AudioUnit這樣的低層級架構的應用數量表示不樂觀。也許今後會有一些為更高層級設計的共享API提供給開發者使用。畢竟要從AudioUnit開始處理音頻對于大多數開發者來說并不是一件很容易的事情。

點對點連接配接 Peer-to-Peer Connectivity

可以看成是AirDrop不能直接使用的補償,代價是需要自己實作。MultipeerConnectivity架構可以用來發現和連接配接附近的裝置,并傳輸資料,而這一切并不需要有網絡連接配接。可以看到Apple逐漸在檔案共享方面一步步放開限制,但是當然所有這些都還是被限制在sandbox裡的。

Store Kit Framework

Store Kit在内購方面采用了新的訂單系統,這将可以實作對訂單的本機驗證。這是一次對應内購破解和有可能驗證失敗導緻内購失敗的更新,蘋果希望藉此減少内購的實作流程,減少出錯,同時遏制内購破解泛濫。前者可能沒有問題,但是後者的話,因為objc的動态特性,決定了隻要有越獄存在,内購破解也是早晚的事情。不過這一點确實友善了沒有能力架設驗證伺服器的小開發者,這方面來說還是很好的。

繼續閱讀