iOS 7引入了許多用戶界面上的改變,比如無邊框的按鈕,透明操作欄,全屏視圖控制器布局。使用Xcode 5可以創(chuàng)建iOS 7項目,并使用模擬器一窺iOS 7用戶界面的變化。
例如,示例程序TheElement在iOS6和iOS7模擬器上分別看起來分別是這樣的。
iOS7模擬器上的樣子 iOS6模擬器上的樣子
注意:iOS 7 beta2 現(xiàn)已發(fā)布,支持iPad
對于這樣結(jié)構(gòu)的程序,你甚至不用更新你的應(yīng)用程序,但在開始之前還是有幾件事要考慮一下。當(dāng)你操作內(nèi)置的應(yīng)用程序時,你會感覺到iOS 7的變化既微妙又深刻。熟悉的UI元素非常易于辨認(rèn),但它們看起來和原來變化很大。接近真實的虛擬觸摸變得更加柔和精妙,同時動態(tài)效果的真實性得到了增強。
注意:iOS 7上所有的UI元素看起來和原來區(qū)別很大,并且提供了許多新功能,但是你所熟悉的UIKit API基本上沒有變化太多。
隨著你探索的深入,會認(rèn)識到iOS 7的主要主題:
- 順從。界面的作用是幫助用戶理解內(nèi)容、和內(nèi)容交互,而不是與內(nèi)容競爭。
- 明晰。每個字號的字體都清晰可辨,icon精確易懂,裝飾元素恰如其分,對于功能的精確聚焦是設(shè)計驅(qū)動力。
- 深度。通過可視化的層、逼真的動畫,加深用戶的愉悅和理解。
因為iOS體驗發(fā)生了根本而普遍的變化,iOS 7為大家提供了一個珍貴的機會:重新審視你的app的核心目的是什么,為用戶提供什么樣的功能。盡管你現(xiàn)在可能還沒準(zhǔn)備好利用這個機會,當(dāng)你將app適配到iOS 7的時候,請記住這一點。(當(dāng)你準(zhǔn)備好重新審視你的app設(shè)計或者開始一個新項目的時候,請參閱《Designing for iOS 7(為iOS 7而設(shè)計)》)
了解app的特征
不論你準(zhǔn)備重新設(shè)計app,或者只是改進(jìn)設(shè)計,你都需要知道你的app的特質(zhì)會對重新設(shè)計過程產(chǎn)生影響。首先請自問如下2個問題,它們能幫助你思考過渡的策略:
你使用Auto Layout來設(shè)計app了嗎?
如果你使用了Auto Layout來布局的話,你的工作量就少了很多。在Xcode 5中,Auto Layout會幫助app自動調(diào)整新的UI元素度量,并且對字號自動動態(tài)調(diào)整。Auto Layout對你從iOS 6升級到iOS 7,和同時支持兩個版本操作系統(tǒng)非常有幫助。
如果你沒有使用Auto Layout,現(xiàn)在開始學(xué)著使用吧,特別是當(dāng)你需要支持app的多個版本的時候。如果使用手動布局或者區(qū)分性布局技術(shù)的話會比較麻煩,就需要時刻考慮確保字號改變的時候造成的布局變化是否合適。
你的app需要支持iOS 6嗎?
記住很多iOS用戶很可能在較短時間內(nèi)升級他們的設(shè)備到iOS 7,他們不希望看到自己喜歡的app在iOS 7上表現(xiàn)得糟糕。
你也可能出于商業(yè)原因需要考慮對iOS 6的支持,這時最佳的方案仍然是將app先升級到支持iOS 7,然后盡可能地去將設(shè)計的變化運用到app的iOS 6版本。這個過程的處理細(xì)節(jié)請參考“支持iOS 6系統(tǒng)”(第7頁)。
接下來要檢查app是依照什么樣的方式定制的。不同定制方式影響了工作量。
定制分為三種類型:
標(biāo)準(zhǔn)型(Standard): app中只包含了UIKit中所提供的標(biāo)準(zhǔn)UI元素。
自定義型(Custom): app中完全使用了UIKit中沒有的自定義UI元素。
混合型(Hybrid): 既使用了標(biāo)準(zhǔn)元素,也用了自定義元素(包括使用UIKit著色和外表自定義API定制的自定義的標(biāo)準(zhǔn)元素)。
對標(biāo)準(zhǔn)型app。需要確認(rèn)視覺和交互設(shè)計在iOS 7環(huán)境下時是否依然合適。如果你決定保持原有的布局和交互方式,主要的工作就是進(jìn)行微調(diào),確保app可以正常處理系統(tǒng)全局的手勢。
自定義型。這對工作量要求就比較高了。如果當(dāng)前的UI和體驗依然合適的話,那要做的事情還不算多。相反,如果app的個性和體驗與iOS 7相差迥異,那為了迎合用戶的習(xí)慣,你可能就需要做比較多的工作了。
混合型。根據(jù)其使用自定義控件的多少與其和標(biāo)準(zhǔn)控件綁定情況不同,工作量也有所區(qū)別。重新審視混合型app的時候,還要確保自定義部分和標(biāo)準(zhǔn)部分依然可以一起正常工作。
注意:如果你的app以自定義的方式模擬了iOS 6的傳統(tǒng)UI,那就會需要花大力氣修改了,否則它會看起來非常陳舊。
過渡工作的范圍
了解你的app特征及其定制方式,能讓你大概知道怎么進(jìn)行過渡。參考下面的清單,填充上自己項目的細(xì)節(jié),來了解整個過渡工作的范圍。
強制每個app做的事情
- 更新app的icon,在iOS 7中,app的圖標(biāo)尺寸是120 x 120像素(高分辨率下)。
- 更新app的載入圖像,如果原有的載入圖像中不包含頂欄部分的話,補充上狀態(tài)欄部分的圖像。
- 請支持Retina屏和iPhone 5的屏幕尺寸。(譯者注:不支持就不能更新了)
-
建議每個app做的事情
- 確保app的內(nèi)容在透明UI元素(比如透明的bar和透明鍵盤)和透明的系統(tǒng)狀態(tài)欄下依然可辨識。在iOS 7中,視圖控制器統(tǒng)一采用了全屏視圖(參考第11頁“使用視圖控制器”)。
- 重新設(shè)計自定義bar的icon。iOS 7下,bar上的按鈕圖標(biāo)更加輕巧,風(fēng)格也有變化。
- 拿掉按鈕的背景圖片, 重視現(xiàn)有的按鈕外觀,嘗試無邊框的按鈕。
- 檢查app中寫死的UI數(shù)值,比如size和position,用系統(tǒng)提供的動態(tài)數(shù)值替換它們。使用Auto Layout幫助你的app完成相應(yīng)布局變化下的響應(yīng)。(如果你這個菜鳥連Auto Layout都不知道是什么的話,請自行閱讀Cocoa Auto Layout Guide)
- 檢查app中使用UIKit的地方,看尺度和風(fēng)格發(fā)生變化的控制器和視圖是否對布局和外觀產(chǎn)生了影響。比如,開關(guān)更加寬了,組合式表格(grouped tables)變成通欄的了,進(jìn)度指示條變成了非常細(xì)的小條。更詳細(xì)的UI元素變化,請參考21頁的“操作欄和欄上的按鈕”,第26頁的“控件”,第19頁的“內(nèi)容視圖”,第32頁的“臨時視圖”。
- 使用動態(tài)的字體。在iOS 7中,用戶可以自由調(diào)整app中的字號大小。如果開發(fā)者使用動態(tài)字體的話,用戶在系統(tǒng)中設(shè)定自定義字號的時候,app的字體也會發(fā)生相應(yīng)的變化。更多信息請參考12頁的“使用字體”。
- 確保你的app不會與系統(tǒng)的新增手勢產(chǎn)生沖突:從屏幕底部向上滑動調(diào)出控制中心的手勢,從屏幕左右邊緣向中間滑動的前進(jìn)后退手勢。
- app樣式中慎用投影、漸變、浮雕效果。因為iOS 7的美學(xué)重視平緩、分層——盡量少使用讓UI元素看起來擬實的視覺效果。
- 必要的話,將app升級到iOS 6中推薦的最佳實踐方法(如:Auto Layout和故事版)并確保app不使用廢棄的API。
現(xiàn)在你知道你需要做哪類事情了,了解更多關(guān)于視圖控制器、著色、字體的改變,請閱讀第11頁的“布局和外觀”。
如果你仍需支持iOS6
如果你必須支持iOS 6和7兩個系統(tǒng),你可以在app運行的時候檢測操作系統(tǒng)的版本,并隨時加載相應(yīng)的資源文件。更多信息請參考第7頁的“支持iOS 6系統(tǒng)”。
支持iOS 6系統(tǒng)
如果出于商業(yè)原因必須支持iOS 6或者更早期的系統(tǒng)版本,你需要選擇最切合實際的方式升級app到支持iOS 7。你選擇的技術(shù)可能有所不同,但總的建議是:聚焦在首先為iOS 7而重新設(shè)計,然后為app考慮iOS 6版本需要做的事情。
注意:在運行iOS 7的設(shè)備上,所有的系統(tǒng)界面元素(比如警告對話框和通知信息)都會使用iOS 7的默認(rèn)外觀,即使你的app使用更早期的外觀。
使用Interface Builder支持app多版本
Xcode 5中的Interface Builder包含了諸多新功能 ,它們能幫助你將app過渡到iOS 7的同時支持舊的版本。
看一下你對用戶界面的升級會對早期版本產(chǎn)生什么樣的影響。使用Assistant Editor,可以在畫布上修改iOS 7故事版或xib文件的同時,看到這些變動會對iOS 6版本文件造成的影響。
預(yù)覽早期故事版文件和xib文件的方法:
- 在畫布上查看iOS 7故事版文件或者xib文件的時候,打開assistant editor。
- 打開Assistant彈出菜單。
- 在菜單中,定位到預(yù)覽項,然后選中相應(yīng)故事版文件或xib文件。
在iOS 7和早期版本iOS的UI預(yù)覽之間切換。如果你的app需要支持iOS 6.1之前的版本,使用這個功能來確認(rèn)UI在早期版本看起來沒有問題。
在兩個版本的UI之間切換的方法:
- 在Interface Builder的檢查器中打開文件。
- 打開菜單“View as”。
- 選擇你想預(yù)覽的版本號。
更多關(guān)于Xcode 5中新的Interface Builder的信息,請參考“What’s New in Xcode”。
支持標(biāo)準(zhǔn)app的兩個版本
如果標(biāo)準(zhǔn)app的兩個版本使用相同的布局,使用Auto Layout創(chuàng)建適用于兩個版本iOS的用戶界面。要支持多版本的iOS,指定單獨一套的常量以便Auto Layout調(diào)整故事版和xib文件中的視圖和控制器。(更多信息參考“Constraints Express Relationships Between Views”)
如果標(biāo)準(zhǔn)app的兩個版本需要使用相同的外觀,但你又沒有使用Auto Layout,那么請使用offsets偏移量。在使用offsets前請將UI升級到iOS 7。接下來將早期UI元素的起始、高度、寬度的值指定為iOS 7中使用的offsets偏移量。
更多Auto Layout的內(nèi)容,請看“Cocoa Auto Layout Guide”。
管理混合型app中的多個版本圖片
混合型app經(jīng)常包含自定義圖片資源,比如操作欄按鈕圖標(biāo),操作欄或者其他控件的視圖背景。apps可以使用一種或多種資源分類方法來管理這些資源。(了解更多資源分類資料,請看“Asset Catalog Help”)
注意:資源分類(asset catalog)包括顯示在app中的資源;資源分類不能包含app的icon,載入圖像,或者其他任何外部過程需要獲取到的圖片。
混合型app如果需要支持多版本iOS,則必須自己管理圖像資源。將與app各個版本的圖片分別使用不同命名。
如果你的故事版或xib文件包含嵌入式圖片,考慮創(chuàng)建一個圖片視圖的出口(outlet),并在需要的時候加載合適的資源。在代碼中加載不同資源的方法,參考“Loading Resources Conditionally”。
依據(jù)附加條件加載資源
有時候,你需要考慮app在什么iOS版本上運行,才能在代碼中做出相應(yīng)的對策。比如,在不同版本的app中,布局可能是截然不同的,可以通過加載不同的故事版或xib文件來實現(xiàn)。你可能需要使用不同代碼來處理API之間的不同之處,比如在給操作欄背景著色的時候使用barTintColor還是tintColor。
如果你需要為不同app版本加載不同的資源,但你只在Info.plist文件中指定了一個故事版或xib文件,那么你也可以先檢查系統(tǒng)版本然后加載對應(yīng)的資源(application:didFinish-LaunchingWithOptions:)
檢測app是否當(dāng)前運行在iOS 7環(huán)境的方法是:寫一個宏來檢查系統(tǒng)版本。下面的代碼展示了檢查系統(tǒng)版本并存儲結(jié)果的方法(方便以后隨時調(diào)用)。
NSUInteger DeviceSystemMajorVersion();
NSUInteger DeviceSystemMajorVersion() {
static NSUInteger _deviceSystemMajorVersion = -1;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_deviceSystemMajorVersion = [[[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@”.”] objectAtIndex:0] intValue];
});
return _deviceSystemMajorVersion;
}
#define MY_MACRO_NAME (DeviceSystemMajorVersion() < 7)
布局和外觀(Layout & Appearance)
iOS 7給你的app布局和UI帶來了不少變化。視圖控制器、著色、字體效果等的變化,會影響你的app中所有UIKit對象。
使用視圖控制器(View Controller)
在iOS 7中,視圖控制器都是全屏的。iOS 7視圖控制器的外觀給人傳達(dá)了更細(xì)膩的控制感。特別是新的全屏外觀讓你可以指定視圖的每個邊緣的布局。
視圖控制器接口wantsFullScreenLayout已作廢。如果你像以前那樣地指定wantsFullScreenLayout = NO,iOS 7中視圖控制器會在將其內(nèi)容顯示到一個意外的屏幕位置。
UIViewController提供了如下屬性來調(diào)整視圖控制器的外觀:
- edgesForExtendedLayout
這個屬性屬于UIExtendedEdge類型,它可以單獨指定矩形的四條邊,也可以單獨指定、指定全部、全部不指定。
使用edgesForExtendedLayout指定視圖的哪條邊需要擴展,不用理會操作欄的透明度。這個屬性的默認(rèn)值是UIRectEdgeAll。 - extendedLayoutIncludesOpaqueBars
如果你使用了不透明的操作欄,設(shè)置edgesForExtendedLayout的時候也請將extendedLayoutIncludesOpaqueBars的值設(shè)置為No(默認(rèn)值是YES)。 - automaticallyAdjustsScrollViewInsets
如果你不想讓scroll view的內(nèi)容自動調(diào)整,將這個屬性設(shè)為NO(默認(rèn)值YES)。
iOS 7中,視圖控制器支持自定義視圖之間的過場動畫。另外,你可以使用iOS 7的新API來支持過場動畫過程中的用戶交互。更多信息請參考下面兩個文檔:《UIViewController過場動畫協(xié)議參考》和《UIViewController過場交互協(xié)議參考》。
iOS 7允許視圖控制器在app運行過程中改變系統(tǒng)狀態(tài)欄的樣式。開啟這個功能,請在Info.plist文件中添加鍵UIViewControllerBasedStatusBarAppearance,并將值設(shè)為YES。動態(tài)改變系統(tǒng)狀態(tài)欄的一個好方法是重寫preferredStatusBarStyle方法,用一個動畫模塊來更新狀態(tài)欄外觀,并調(diào)用setNeedsStatusBarAppearanceUpdate方法。
使用著色(Tint Color)
在iOS 7中,著色是UIView的一個屬性。iOS 7的app會使用著色來定義一個關(guān)鍵色,這個顏色表明“這里是可交互的”,或者表示元素選中的狀態(tài)。
當(dāng)你指定某個視圖的著色的時候,這個顏色會自動繼承到所有的子視圖中。因為UIWindows繼承自UIView,你可以這樣通過設(shè)置窗體的著色屬性指定著色:
window.tintColor = [UIColor purpleColor];
如果不為窗體指定著色,則會使用系統(tǒng)默認(rèn)的顏色。
默認(rèn)情況下,視圖的著色是nil,意味著視圖使用父級的著色。也就是說哪怕你不設(shè)置著色的話,視圖也總能夠獲取到一個色值。
總的來說,最好在視圖還沒有顯示到屏幕上之前指定它的著色。想讓視圖繼承上個層級的著色的話,就將著色設(shè)置為nil。
重要:iOS 7不支持通過外觀代理API來設(shè)置著色。
當(dāng)警告框(alert)和上拉菜單(action sheet)出現(xiàn)的時候,iOS 7自動將背后視圖的著色變暗。為了響應(yīng)該色彩變化,在渲染時使用tintColor的自定義視圖的子類需要重寫tintColorDidChange方法,以便在合適的時候刷新渲染。
注意:在iOS 6中,tintColor可以用來給導(dǎo)航欄的背景著色、tab欄、工具欄、搜索欄、搜索欄的范圍選擇欄著色。而在iOS 7中,給背景著色只需要使用barTintColor屬性就可以了。
使用字體(Fonts)
iOS 7引入了動態(tài)字體(Dynamic Type),它讓你的app中的字體顯示更加出色。
最小字號下的郵件正文 最大非殘障輔助字號下的郵件正文
使用動態(tài)字體時,同時意味著:
- 所有文字的粗細(xì),字間距,行高都被自動調(diào)整。
- 可以語義上指定不同的文字樣式:正文、腳注、大標(biāo)題等等。
- 對動態(tài)字體和殘障輔助超大號字體都能有很好的響應(yīng)效果。
要享受動態(tài)字體的好處,請用UIFont類下的preferredFontForTextStyle方法來生成文字,而不是直接指定字體的名稱和大小。iOS 7會保證每個大小字體的最佳可讀性。
相關(guān)閱讀:
- 不舍越獄暫不升級iOS7.1 盡享PP助手70萬應(yīng)用
- Nokia X界面設(shè)計規(guī)范(在線地址)
- 《iOS7人機界面準(zhǔn)則》中文版(pdf版)下載
- iOS 7.1 beta 5已封堵evasi0n7越獄漏洞
- iOS7出現(xiàn)重大漏洞!無需密碼可關(guān)閉“查找我的...
- Evasi0n7支持iOS 7.0.5的完美越獄
- iOS7.1正式版預(yù)計3月發(fā)布 PP助手滿足多向需求
- 玩轉(zhuǎn)iOS7越獄應(yīng)用 PP助手(iOS)2.0一步到位
- PP助手(iOS)2.0扁平新裝 為iOS7完美越獄華...
- Evasi0n7 1.0.3發(fā)布 支持iOS 7.1 beta版越獄