iOS7設(shè)計指南
本文最新PDF格式文檔下載:?http://vdisk.weibo.com/s/InBpB(2013年7月3日更新)
過渡前的準備
重要:由于iOS7還未最終發(fā)布,該文檔的部分內(nèi)容還會繼續(xù)修改。
開始之前的工作
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元素非常易于辨認,但它們看起來和原來變化很大。接近真實的虛擬觸摸變得更加柔和精妙,同時動態(tài)效果的真實性得到了增強。
注意:iOS 7上所有的UI元素看起來和原來區(qū)別很大,并且提供了許多新功能,但是你所熟悉的UIKit?API基本上沒有變化太多。
隨著你探索的深入,會認識到iOS 7的主要主題:
- 順從。界面的作用是幫助用戶理解內(nèi)容、和內(nèi)容交互,而不是與內(nèi)容競爭。
- 明晰。每個字號的字體都清晰可辨,icon精確易懂,裝飾元素恰如其分,對于功能的精確聚焦是設(shè)計驅(qū)動力。
- 深度。通過可視化的層、逼真的動畫,加深用戶的愉悅和理解。
因為iOS體驗發(fā)生了根本而普遍的變化,iOS 7為大家提供了一個珍貴的機會:重新審視你的app的核心目的是什么,為用戶提供什么樣的功能。盡管你現(xiàn)在可能還沒準備好利用這個機會,當(dāng)你將app適配到iOS 7的時候,請記住這一點。(當(dāng)你準備好重新審視你的app設(shè)計或者開始一個新項目的時候,請參閱《Designing for iOS 7(為iOS 7而設(shè)計)》)
了解app的特征
不論你準備重新設(shè)計app,或者只是改進設(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版本。這個過程的處理細節(jié)請參考“支持iOS 6系統(tǒng)”(第7頁)。 接下來要檢查app是依照什么樣的方式定制的。不同定制方式影響了工作量。 定制分為三種類型: 標準型(Standard):?app中只包含了UIKit中所提供的標準UI元素。 自定義型(Custom):?app中完全使用了UIKit中沒有的自定義UI元素。 混合型(Hybrid):?既使用了標準元素,也用了自定義元素(包括使用UIKit著色和外表自定義API定制的自定義的標準元素)。 對標準型app。需要確認視覺和交互設(shè)計在iOS 7環(huán)境下時是否依然合適。如果你決定保持原有的布局和交互方式,主要的工作就是進行微調(diào),確保app可以正常處理系統(tǒng)全局的手勢。 自定義型。這對工作量要求就比較高了。如果當(dāng)前的UI和體驗依然合適的話,那要做的事情還不算多。相反,如果app的個性和體驗與iOS 7相差迥異,那為了迎合用戶的習(xí)慣,你可能就需要做比較多的工作了。 混合型。根據(jù)其使用自定義控件的多少與其和標準控件綁定情況不同,工作量也有所區(qū)別。重新審視混合型app的時候,還要確保自定義部分和標準部分依然可以一起正常工作。
注意:如果你的app以自定義的方式模擬了iOS 6的傳統(tǒng)UI,那就會需要花大力氣修改了,否則它會看起來非常陳舊。
過渡工作的范圍
了解你的app特征及其定制方式,能讓你大概知道怎么進行過渡。參考下面的清單,填充上自己項目的細節(jié),來了解整個過渡工作的范圍。
強制每個app做的事情
- 更新app的icon,在iOS 7中,app的圖標尺寸是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上的按鈕圖標更加輕巧,風(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)變成通欄的了,進度指示條變成了非常細的小條。更詳細的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)出控制中心的手勢,從屏幕左右邊緣向中間滑動的前進后退手勢。
- 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的默認外觀,即使你的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之前的版本,使用這個功能來確認UI在早期版本看起來沒有問題。 在兩個版本的UI之間切換的方法:
- 在Interface Builder的檢查器中打開文件。
- 打開菜單“View as”。
- 選擇你想預(yù)覽的版本號。
更多關(guān)于Xcode 5中新的Interface Builder的信息,請參考“What’s New in Xcode”。
支持標準app的兩個版本
如果標準app的兩個版本使用相同的布局,使用Auto Layout創(chuàng)建適用于兩個版本iOS的用戶界面。要支持多版本的iOS,指定單獨一套的常量以便Auto Layout調(diào)整故事版和xib文件中的視圖和控制器。(更多信息參考“Constraints Express Relationships Between Views”) 如果標準app的兩個版本需要使用相同的外觀,但你又沒有使用Auto Layout,那么請使用offsets偏移量。在使用offsets前請將UI升級到iOS 7。接下來將早期UI元素的起始、高度、寬度的值指定為iOS 7中使用的offsets偏移量。 更多Auto Layout的內(nèi)容,請看“Cocoa Auto Layout Guide”。
管理混合型app中的多個版本圖片
混合型app經(jīng)常包含自定義圖片資源,比如操作欄按鈕圖標,操作欄或者其他控件的視圖背景。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視圖控制器的外觀給人傳達了更細膩的控制感。特別是新的全屏外觀讓你可以指定視圖的每個邊緣的布局。 視圖控制器接口wantsFullScreenLayout已作廢。如果你像以前那樣地指定wantsFullScreenLayout = NO,iOS 7中視圖控制器會在將其內(nèi)容顯示到一個意外的屏幕位置。 UIViewController提供了如下屬性來調(diào)整視圖控制器的外觀:
- edgesForExtendedLayout 這個屬性屬于UIExtendedEdge類型,它可以單獨指定矩形的四條邊,也可以單獨指定、指定全部、全部不指定。 使用edgesForExtendedLayout指定視圖的哪條邊需要擴展,不用理會操作欄的透明度。這個屬性的默認值是UIRectEdgeAll。
- extendedLayoutIncludesOpaqueBars 如果你使用了不透明的操作欄,設(shè)置edgesForExtendedLayout的時候也請將extendedLayoutIncludesOpaqueBars的值設(shè)置為No(默認值是YES)。
- automaticallyAdjustsScrollViewInsets 如果你不想讓scroll view的內(nèi)容自動調(diào)整,將這個屬性設(shè)為NO(默認值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)默認的顏色。 默認情況下,視圖的著色是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)字體時,同時意味著:
- 所有文字的粗細,字間距,行高都被自動調(diào)整。
- 可以語義上指定不同的文字樣式:正文、腳注、大標題等等。
- 對動態(tài)字體和殘障輔助超大號字體都能有很好的響應(yīng)效果。
要享受動態(tài)字體的好處,請用UIFont類下的preferredFontForTextStyle方法來生成文字,而不是直接指定字體的名稱和大小。iOS 7會保證每個大小字體的最佳可讀性。
操作欄和欄上按鈕(Bars & Bar Buttons)
iOS 7中,狀態(tài)欄是透明的,其他的操作欄(導(dǎo)航欄、tab欄、工具欄、搜索欄、搜索欄下面的范圍選擇欄)是半透明的。通常情況下,你希望能看到操作欄背后是你的內(nèi)容。 大多數(shù)操作欄會將遮蔽住的內(nèi)容進行模糊處理,除非你提供一張自定義背景圖。 為了標識操作欄的位置,iOS 7引入了barPosition屬性,它可以幫助你指定什么時候自定義背景圖片需要平鋪在狀態(tài)欄上。值UIBarPositionTopAttached表明操作欄貼近屏幕頂部,背景向上延伸入系統(tǒng)狀態(tài)欄區(qū)域。相對的,值UIBarPositionTop表示操作欄位于當(dāng)前局部內(nèi)容的頂部(比如,在彈出式氣泡的頂部)它不為狀態(tài)欄提供背景。 默認情況下,所有的欄上按鈕都是無邊框的。詳情請看第18頁的“欄上按鈕”。
系統(tǒng)狀態(tài)欄(Status Bar)
因為系統(tǒng)狀態(tài)欄是透明的,所以可以透過它看到后面的視圖。狀態(tài)欄的風(fēng)格依照它內(nèi)容的外觀呈現(xiàn),包括時間、電量、Wi-Fi信號等。使用常量UIStatusBarStyle來指定使用黑色風(fēng)格還是白色風(fēng)格: UIStatusBarStyleDefault?顯示黑色的文字內(nèi)容。當(dāng)狀態(tài)欄后面的內(nèi)容是淡色的時候適合使用。
UIStatusBarStyleLightContent?顯示白色的文字內(nèi)容。當(dāng)狀態(tài)欄后面的內(nèi)容是深色時使用比較合適。
有些情況下,導(dǎo)航欄和搜索欄的背景圖片可以向上延伸到狀態(tài)欄背后(詳情見22頁的“導(dǎo)航欄”章節(jié)和23頁的“搜索欄和范圍選擇欄”章節(jié))。如果狀態(tài)欄下面沒有其他欄,內(nèi)容視圖需要使用全屏高度。要了解視圖控制器是怎樣恰當(dāng)?shù)夭季值?,請?1頁的“使用視圖控制器”。在iOS 7中,通過獨立的視圖控制器,可以在app運行的時候改變狀態(tài)欄的風(fēng)格。實現(xiàn)方法是在Info.plist中加入鍵UIViewControllerBasedStatusBarAppearance,并設(shè)置值為YES。
- 導(dǎo)航欄(Navigation Bar)
- 導(dǎo)航欄幫助用戶在不同信息層次結(jié)構(gòu)中穿梭,并選擇性地管理屏幕內(nèi)容。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
- iOS 7 讓在導(dǎo)航欄上增加搜索欄的變得非常簡單。詳情參考第16頁的“搜索欄和范圍選擇欄”。* ?如果想用自定義的圖像來替換返回的箭頭“<”的話,還需自己創(chuàng)建一個相應(yīng)的遮罩。在導(dǎo)航過場動畫的時候,iOS 7使用遮罩來讓上個層級的標題漸隱漸出。了解更多返回按鈕和遮罩圖像的控制屬性,請參閱 “UINavigationBar類參考”?。
如果你使用UIBarPositionTopAttached樣式創(chuàng)建了一個導(dǎo)航欄背景,確保圖像包含了系統(tǒng)狀態(tài)欄的區(qū)域。具體來說,你需要一個高分辨率下128像素的圖像。 下面這個表格描述了iOS 7如何對待不同高度的可變導(dǎo)航欄背景。(更多請看“UIImage類參考”) 表格 5-1 可變大小的背景圖片處理策略
搜索欄和范圍選擇欄(Search Bar & Scope Bar)避免使用超高的背景圖片來制作導(dǎo)航欄下面的自定義投影,這種技術(shù)在iOS 7中不起作用,因為超高的圖片會向上(系統(tǒng)狀態(tài)欄方向)擴展,而不是向下(導(dǎo)航欄下面)擴展。如果你想給導(dǎo)航欄增加投影,可以創(chuàng)建一個自定義圖片,然后使用shadowImage屬性來自定義投影圖片。 搜索欄接收用戶輸入的文字,下方可以附帶一個范圍選擇欄。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6 在iOS 7中,UISearchDisplayController包含了displaySearchBarInNavigationBar屬性,這樣你就可以將搜索欄放進導(dǎo)航欄,就像日歷app里面這樣:如果你使用UIBarPositionTopAttached的位置為搜索欄創(chuàng)建了一個背景圖片,請確保圖片的高度包含了狀態(tài)欄的高度。如果你創(chuàng)建了一個可變大小的背景圖片,參閱15頁的表格5-1獲取更多iOS 7調(diào)整背景圖片大小的策略。
范圍選擇欄則允許用戶選擇搜索結(jié)果的范圍。
注意:范圍選擇欄不能單獨出現(xiàn);必須依附在搜索欄下面出現(xiàn)。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
Tab欄(Tab Bar)
Tab欄讓用戶可以在不同子任務(wù)、視圖、模式之間切換。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
如果使用了自定義icon的話,可以使用UITabBarItem中的selectedImage屬性來設(shè)置按下狀態(tài)的圖像。如果不提供按下狀態(tài)的icon,則兩個狀態(tài)會使用相同icon。
工具欄(Toolbar)
工具欄上放置當(dāng)前屏幕或者視圖下相關(guān)的對象的操作按鈕。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
如果你創(chuàng)建了可變大小的背景圖片,請參考15頁的表格5-1獲取iOS 7處理不同尺寸圖片的細節(jié)。
欄上按鈕(Bar Buttons)
在iOS 6中,欄上按鈕可以是有邊框的,也可以是無邊框的。在iOS 7中只能是無邊框的。
iOS 7中的導(dǎo)航欄按鈕? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6中的導(dǎo)航欄按鈕
為了更加明確,在iOS 7中,app的欄上按鈕經(jīng)常使用文字而不是圖形。例如,iOS 7中的日歷應(yīng)用使用了Inbox(收件箱)代替了收件箱圖形: iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
在早期版本的iOS中,自定義欄上按鈕圖片會自動被當(dāng)做“template image”。(template image被用作最終圖像的一個遮罩。)而iOS 7中,你可以使用以下UIImage屬性來指定是否需要把自定義的圖片當(dāng)做template image來處理:
- UIImageRenderingModeAlwaysTemplate。圖片被用作Template Image。
- UIImageRenderingModeAlwaysOriginal。圖片按照原樣渲染。
如果你沒有指定對圖片的處理方法的話,圖片會使用包含它的視圖的默認處理方式。比如,tab欄默認會使用template處理方式,而進度滑塊則會使用原樣完整渲染的處理方式。
注意:template image會依照其父結(jié)構(gòu)的著色進行著色(更多請看18頁的“使用著色”)。如果不想讓欄上的元素被著色,為圖片設(shè)置UIImageRendering-ModeAlwaysOriginal屬性。
內(nèi)容視圖(Content View)
內(nèi)容視圖用來顯示自定義的app內(nèi)容。因為大多數(shù)內(nèi)容視圖的外觀系統(tǒng)都沒有提供,所以iOS 7視覺上的變化對他們幾乎沒有影響。有個比較大的例外是分組聚合表格視圖,它在iOS 7上外觀有巨大的變化。
活動菜單(Activity)
活動菜單代表了一個可以響應(yīng)當(dāng)前選擇內(nèi)容的功能,它可以是系統(tǒng)提供的或者自定義的。用戶可以通過系統(tǒng)提供的活動視圖控制器來使用這些功能,當(dāng)用戶點擊分享按鈕的時候,活動視圖控制器就會從屏幕底部向上升起。 系統(tǒng)提供的活動菜單中可以提供兩種風(fēng)格的按鈕:
- 原樣渲染的app圖標——比如下面這個郵件的icon
- 和tab欄上的按鈕一樣的風(fēng)格——比如下面復(fù)制、打印這樣的icon
第三方功能總是使用第二種風(fēng)格的icon。
如果要在你的app中提供某個服務(wù),創(chuàng)建一個簡潔、線框狀的template image。創(chuàng)建template image的時候請遵守下述指導(dǎo)原則:
- 使用黑色或者白色,配合適當(dāng)?shù)腶lpha透明度
- 不要使用投影
- 使用抗鋸齒效果
活動菜單上的template image應(yīng)該在區(qū)域中居中,分辨率大約在70 x 70像素左右。
集合視圖(Collection View)
集合視圖用來管理和有序排列項目,將它們以可定制的布局進行呈現(xiàn)。 在iOS 7中,集合視圖支持自定義過場動畫。了解更多請參考“UICollectionViewTransition-Layout類參考”。 照片應(yīng)用使用了集合視圖來展示圖片集,并支持他們之間的過場動畫。
圖片視圖(Image View)
圖片視圖顯示一張圖片或者一系列動態(tài)的圖片。 在iOS 7中,UIImageView包含了著色屬性tintColor。當(dāng)圖片視圖包含template image的時候,tintColor會被應(yīng)用到圖片上。
地圖視圖(Map View)
地圖視圖展示地理數(shù)據(jù),支持自帶地圖應(yīng)用的大多數(shù)功能。 照片應(yīng)用中的地圖視圖幫助用戶查看照片的地理位置信息。
在iOS 7,只能夠使用一個新的類MKOverlayRenderer來在地圖視圖上面創(chuàng)建覆蓋層。 如果要給地圖視圖增加3D外觀的話,只需給它的camera屬性分配一個相機對象即可(MKMapCamera的一個實例)。要了解更多,參考“MKMapView類參考”。
頁面視圖控制器(Page View Controller)
頁面視圖控制器用來管理多頁的內(nèi)容,可以使用滾動過場,也可以使用卷頁過場動畫。 在iOS 7中,使用兩個方法來分別指定(pageViewControllerPreferredInterfaceOrientationForPresentation和pageViewControllerSupportedInterfaceOrientations)。 下面可以看到iOS 7模擬器中頁面視圖控制器的默認外觀:
滾動視圖(Scroll View)
滾動視圖幫助用戶查看超出視圖邊界的內(nèi)容。滾動視圖在iOS 6和7上視覺唯一的不同是滾動條的外觀。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
在iOS 7上,你可以通過UIViewController的automaticallyAdjustsScrollViewInsets屬性來管理滾動視圖的項目分組之間的間隔。
表格視圖(Table View)
表格視圖將數(shù)據(jù)以多行單列的列表呈現(xiàn)。 iOS 7為單行和成組的表格視圖引入了新的變化。
iOS 7(表格組)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6(表格組)
表格視圖中的元素在iOS 7中也有了不同的樣式。
文本視圖(Text View)
文本視圖接受和顯示多行文本。 請使用UIFont類的preferredFontForTextStyle方法獲取文本視圖中顯示的文字內(nèi)容。
網(wǎng)頁視圖(Web View)
網(wǎng)頁視圖是可以顯示富HTML內(nèi)容的區(qū)域。 在iOS 7中,UIWebView支持顯示分頁外觀的內(nèi)容的顯示。
控件(Controls)
控件是種特殊的UI元素,用戶既可以看(獲取信息)也可以與之交互(操作它)。所有的iOS 7控件的外觀都得到了升級,它們大多數(shù)都有了新的尺度。 因為UIControl是從UIView繼承而來,你可以使用控件的tintColor屬性來為它們著色。更多內(nèi)容請參閱第11頁的“使用著色”。 系統(tǒng)提供的控件默認支持系統(tǒng)定義的動效,外觀也會隨著高亮和選中狀態(tài)的變化而變化。
日期拾取器(Date Picker)
日期拾取器顯示了日期和時間的內(nèi)容,包括:分鐘,小時,日期,年份。它的整體尺寸和iOS 6比起來沒有變化,但是外觀發(fā)生了巨大的變化。
iOS 7的app會將日期拾取器嵌入到內(nèi)容中,而不是單獨呈現(xiàn)在一個彈出的視圖上。比如日歷應(yīng)用動態(tài)地將表格的一行擴展開,將日期拾取器嵌入,用戶指定時間的時候就不需要離開當(dāng)前這個添加事項視圖。
新增聯(lián)系人按鈕(Contact Add Button)
新增聯(lián)系人按鈕是一個UIButtonTypeContactAdd類型的UIButton,它可以將用戶的信息添加到其他基于文字視圖的文字域中。 新增聯(lián)系人按鈕的大小和外觀在iOS 7中有變化。
iOS 7 ? ? ? ? ? ? ? iOS 6
細節(jié)展開按鈕(Detail Disclosure Button)
細節(jié)展開按鈕是一個UIButtonTypeDetailDisclosure類型的UIButton,它表明當(dāng)前項目還有額外的細節(jié)和相關(guān)功能,點擊后會在另一個表格或視圖中呈現(xiàn)。在iOS 7中,細節(jié)展開按鈕使用和Info按鈕一樣的符號。
iOS 7 ? ? ? ? ? ? ? iOS 6
當(dāng)細節(jié)展開按鈕出現(xiàn)在表格的一行中,點擊該行的其它地方不會激活該按鈕;相反地,這個操作會選中該行,或者觸發(fā)app定義的行為。
Info按鈕(Info Button)
Info按鈕的類型是UIButtonTypeInfoLight或者UIButtonTypeInfoDark。它表明app的配置細節(jié)入口,新頁面有時候出現(xiàn)在當(dāng)前視圖的背面。在iOS 7中,info按鈕使用和細節(jié)展開按鈕相同的圖形。 在iOS 7中,info按鈕的大小和外觀發(fā)生了變化。
iOS 7? ? ? ? ? ? iOS 6(天氣應(yīng)用中的)
文本標簽(Label)
文本標簽用來呈現(xiàn)靜態(tài)文本。 默認情況下,文本標簽會使用系統(tǒng)字體,所以在iOS 6和7上會看起來不一樣。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
確保使用UIFont的方法preferredFontForTextStyle來獲取顯示在標簽上的文字。
頁碼控件(Page Control)
頁碼控件指示打開了多少視圖,當(dāng)前看到的是哪一個。 iOS 7中,頁碼控件的大小和外觀發(fā)生了變化。
iOS 7(天氣應(yīng)用中的) ? ? ? ? ? ? ? ? ? ? iOS 6(天氣應(yīng)用中的)
拾取器(Picker)
拾取器顯示一系列值,用戶可以滾動并選擇其一。 拾取器的總體大小相比iOS 6沒有變化;外觀和行為與日期時間拾取器是一致的。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
進度視圖(Progress View)
進度視圖用來展示任務(wù)和過程的進度。 進度視圖的大小和外觀(下圖是在自帶郵件客戶端中的)在iOS 7中發(fā)生了變化。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
刷新控件(Refresh Control)
刷新控件響應(yīng)用戶主動觸發(fā)的刷新操作,一般會出現(xiàn)在表格上。 它的大小和外觀在iOS 7中發(fā)生了變化。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
圓角矩形按鈕(Rounded Rectangle Button)
圓角矩形按鈕在iOS 7中被棄用了。用系統(tǒng)的無邊界按鈕替代它。對應(yīng)的類型是UIButtonTypeSystem的UIButton。 iOS 7系統(tǒng)按鈕不包括倒角和背景樣式。系統(tǒng)按鈕可以包含一個圖形或者文字信息,可以指定一種著色或者繼承父級的著色。
iOS 7系統(tǒng)按鈕? ? ? ? ? ? iOS 6的圓角矩形按鈕
注意:在iOS 7中,UIButtonTypeRoundedRect被重新定義成UIButtonType-System。在iOS 6中使用圓角矩形按鈕的app會自動轉(zhuǎn)化成系統(tǒng)按鈕的外觀。
如果你需要顯示一個包含倒角的按鈕,使用UIButtonTypeCustom類型的按鈕,這個類型支持自定義背景圖片。
分段控件(Segmented Control)
分段控件是由一系列分段構(gòu)成的,每個段的功能相當(dāng)于一個按鈕,每個按鈕點擊后都展示一個不同的視圖。 分段控件的大小和樣式在iOS 7中的變化如下。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
在iOS 7中,分段控件使用單一的樣式,segmentedControlStyle屬性不再使用。
滑動器(Slider)
滑動器讓用戶可以在允許的范圍內(nèi)連續(xù)調(diào)整某個值。 在iOS 7中的大小和樣式如下。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
iOS 7中依然可以對最小和最大軌道圖像按下狀態(tài)使用著色,使用三個屬性來操作(minimumTrackTintColor,maximumTrackTintColor和thumbTintColor)。如果你將minimumTrackColor屬性設(shè)為nil,則該區(qū)域會繼承父級的著色;如果設(shè)置maximumTrackTintColor或thumbTintColor的值為nil的話,兩個區(qū)域都會使用默認顏色。
步進器(Stepper)
步進器可以將某個值增減一個常數(shù)值。 它在iOS 7中的大小和外觀發(fā)生了變化。
iOS 7 ? ? ? ? ? ? ? ? ? ? ? iOS 6
在iOS 7中,默認情況下,步進器將自定義增減位置的圖像視為template image。
開關(guān)(Switch)
開關(guān)用來表示兩個互斥的選項或狀態(tài)(最常在表格視圖中使用)。 在iOS 7中的變化如下。
iOS 7 ? ? ? ? ? ? ? ? ? ? ? iOS 6
iOS 7繼續(xù)可以對開、關(guān)、不可用三個狀態(tài)使用著色。按下狀態(tài)則使用下面三個屬性著色:onTintColor,tintColor和thumbTintColor。 在iOS 7中,默認情況中自定義的開關(guān)圖像會被忽略。
文本域(Text Field)
文本域接受用戶的單行輸入。 它在iOS 7中的大小和外觀有如下變化。
iOS 7(地圖中的兩行文字域) ? ? ? ? ? ? ? ? ? ? iOS 6( 地圖中的兩行文字域)
確保使用UIFont的preferredFontForTextStyle方法來獲取和顯示文字域中的文字。
臨時視圖(Temporary Views)
動作列表,警告對話框,模態(tài)視圖是三種臨時視圖,它們在需要用戶特別注意的時候、或提供額外的選擇或者功能的時候會出現(xiàn)。 雖然動作列表和警告對話框的內(nèi)容可以自定義,它們的外觀能做的自定義很少。因此你幾乎不用考慮怎么讓它們在iOS 7上看起來更美觀。 因為模態(tài)視圖本質(zhì)上是視圖的一種,你可能也需要重新設(shè)計一下模態(tài)視圖,讓它們在iOS 7上看起來更適宜。
注意:當(dāng)臨時視圖出現(xiàn)的時候,iOS 7自動將背后那個標準視圖變暗。你可能需要調(diào)整一下你的代碼來處理這種顏色的變化;更多信息請看第18頁的“使用著色”。
動作列表(Action Sheet)
動作列表用來呈現(xiàn)一系列用戶觸發(fā)的任務(wù)的選擇。 在iOS 7中,默認情況動作列表是透明的,包括無邊框的按鈕。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
iOS 7中,常量UIActionSheetStyle不再使用。在iOS 7設(shè)備上,不管系統(tǒng)提供的UI(如動作列表的UI)是怎樣的,都會一律使用iOS 7的默認外觀。 注意動作列表中潛在危險的選項——destructiveButtonTitle中參數(shù)initWithTitle:delegate:cancelButtonTitle:destructiveButtonTitle:otherButtonTitles指定的——自動使用系統(tǒng)紅色。
警告對話框(Alert)
警告對話框呈現(xiàn)給用戶影響他們使用app或者設(shè)備的重要信息。 外觀在iOS 7上看起來是這樣的。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
在iOS 7設(shè)備中,系統(tǒng)提供的UI(比如警告框)使用系統(tǒng)提供的樣式,不管當(dāng)前運行的app樣式是怎樣的。 如果你的警告對話框有三個按鈕,第三個按鈕會顯示在這兩個主按鈕下面一排。
模態(tài)視圖(Modal View)
模態(tài)視圖提供了當(dāng)前任務(wù)或工作流的自承載的功能。 在iOS 7中,系統(tǒng)提供的模態(tài)視圖使用和以前相同的外觀。
iOS 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? iOS 6
在iOS 7中,你可以使用自定義的對象和選擇性交互控制器對象來管理模態(tài)展現(xiàn)。了解更多自定義視圖控制器的過場動畫,請參考UIViewControllerAnimatorTransitioning協(xié)議參考和UIViewControllerInteractiveTransitioning協(xié)議參考。
文檔修訂歷史
2013-06-10 蘋果官方文檔發(fā)布
2013-06-20 中文翻譯版完成
2013-06-21 完成第一次修訂(語義修訂)
2013-06-24 完成第二次修訂(邏輯修訂)
2013-07-02?板式全面設(shè)計,措辭修訂
本文出自搜狐MUED博客,轉(zhuǎn)載時請注明出處
- 目前還沒評論,等你發(fā)揮!