1. 程式人生 > >iOS 人機介面指南

iOS 人機介面指南

處理常見任務

如果您具有使用桌面計算機或行動式計算機應用程式的經驗,那麼您會發現iPhone應用程式處理很多常見任務的方式與它們不同。本節從人機介面的角度描述了這些常見任務;關於程式碼實現的技術細節,請參考iPhone應用程式程式設計指南

啟動

iPhone應用程式應能夠迅速啟動,從而使用者可以立即開始使用它們。啟動時,iPhone應用程式應該:

  • 指定適當的狀態列樣式(關於可用樣式的資訊請參考“狀態列”一節)。

  • 顯示一幅酷似應用程式初始螢幕的啟動影象。這減少了使用者感知到的應用程式的啟動時間。要了解更多有關的資訊,請參考。

  • 避免顯示“關於”視窗,啟動畫面,也不要提供任何其他型別的妨礙使用者立即使用應用程式的體驗。

  • 預設情況下,在螢幕上縱向啟動應用程式。如果您打算讓應用程式只能在螢幕橫向時使用,則無論裝置當前的方向如何,都在螢幕上橫向啟動應用程式。如果必要的話,要允許使用者將裝置旋轉為橫向。

    僅橫向顯示的應用程式應該支援兩種“橫向”—不論“主頁”按鈕在螢幕右側還是左側,都能夠正常顯示應用程式。如果裝置本身已經被橫向放置,則這種僅橫向顯示的應用程式就按照裝置的方向啟動。否則,在預設情況下,僅橫向顯示的應用程式在啟動時,“主頁”按鈕只能在應用程式的右方。

  • 將您的應用程式恢復到最後一次執行時的狀態。

重要:不要在您的應用程式安裝完成後提示使用者重新引導或重新啟動他們的裝置。如果您的應用程式存在記憶體使用或其他方面的問題,導致除非系統是剛剛啟動過的,否則您的應用程式難以執行,那麼您需要解決這些問題。例如,您可以閱讀iPhone應用程式程式設計指南

中的“高效地使用記憶體”一節,瞭解如何開發運轉良好的應用程式。

停止

當用戶開啟另一個應用程式或使用裝置自身功能(比如電話)時,iPhone應用程式必需終止。要特別注意的是,應用程式的終止不需要使用者點選應用程式關閉按鈕或在選單上選擇“退出”操作。iPhone應用程式應該:

  • 隨時準備接收退出或終止通知。因此,要儘可能快並且在合理情況下經常儲存使用者資料。

  • 當應用程式終止時,儘可能詳細地儲存它的當前狀態。例如,如果您的應用程式能夠顯示滾動的資料,則應該儲存當前的滾動位置。

iPhone應用程式不應該直接通過程式碼退出,因為這樣做會使使用者覺得應用程式崩潰了。但是,可能有些時候,外部環境會阻止您的應用程式正常執行。處理這種情況的最好方法是讓螢幕顯示醒目的內容,在螢幕上描述該問題並向用戶提出解決問題的建議。這樣做會在以下兩方面對使用者有所幫助:

  • 它提供了反饋資訊,告訴使用者您的應用程式沒有出現錯誤,使使用者放心。

  • 它能夠控制使用者行為,讓他們決定是採取一些糾正的行動來繼續使用您的應用程式,還是按下“主頁”按鈕來開啟另一個應用程式。

如果在一些特定的環境中,您的應用程式只是部分功能無法正常工作,那麼在使用者想要啟用該功能時,您可以在螢幕上顯示資訊或警告。雖然警告在設計上不具備太大的靈活性,但如果您可以保證以下幾點,它也可以成為一種很好的選擇:

  • 非常簡潔地描述當前情況

  • 提供一個執行糾正動作的按鈕

  • 當用戶試圖訪問無法正常工作的功能時顯示警告

和所有的警告一樣,使用者越少看到它們,就說明它們越有效。關於建立警告的更多資訊請參考。

管理設定或配置選項

iPhone應用程式可以向用戶提供設定功能,使使用者可以根據自己的喜好來設定應用程式行為或配置選項,從而改變應用程式的一些功能。可設定的應該是一些使用者設定一次後很少(如果有的話)改變的資訊,比如帳戶名稱。使用者可以在內建的“設定”程式中檢視特定應用程式的設定。配置選項是一些使用者可能想要經常改變的值,比如在列表中顯示的分類的型別;配置選項應該由應用程式本身提供。

您應該把設定和配置選項看作是互斥的。也就是說,您不應該在您的應用程式中同時提供設定和配置選項。

iPhone應用程式最好不要求使用者指定任何設定。這樣使用者無需提供設定資訊就可以立即使用這些應用程式。為了在您的應用程式中實現這一點,您可以採用以下這些設計決策:

  • 使您的解決方案滿足80%使用者的需求。當您採用這樣的設計時,大多數使用者不需要提供設定資訊,因為您的應用程式已經按照大部分使用者所預期的行為進行了設定。可以不考慮那些只有少數使用者需要的功能和大部分使用者僅需使用一次的功能。

  • 從其他途徑獲取儘可能多的資訊。如果您可以用到任何使用者在內建應用程式或裝置設定中提供的資訊,那麼您可以向作業系統查詢這些資訊的值;不要讓使用者再次輸入它們。

  • 如果您必須向用戶請求設定資訊,請在應用程式內部提示使用者輸入資訊。然後立即將這一資訊儲存在您的應用程式的設定中。這樣,使用者在開始使用您的應用程式之前,就不會被迫退出應用程式而先開啟“設定”介面。如果使用者稍後需要更改這些資訊,他們可以隨時在您的應用程式的設定中進行更改。

如果使用者想要開啟“設定”程式,就必須首先退出您的應用程式,而您應該不鼓勵使用者採取這樣的行為。系統並沒有提供支援這一行為的圖示或控制元件,而且建議您也不要為此建立自定義的圖示或控制元件。如果您決定一定要在您的iPhone應用程式中提供設定,請參考iPhone應用程式程式設計指南中的“設定程式包”一節,瞭解如何在您的程式碼中實現對這些功能的支援。

注意:應用程式特定的設定不應該包括使用者幫助的內容。

與設定不同,由於使用者會選擇從新資源或以不同佈局來檢視資訊,因此配置選項很可能經常發生改變。對於這些選項所做的更改,您可以動態地作出響應,因為使用者不需要離開您的應用程式來訪問它們。

您可以在主使用者介面或螢幕的背面提供配置選項。具體使用哪一種技術更合理取決於該選項代表的是不是主要功能以及使用者對其進行更改的頻率。

例如,“日曆”程式允許使用者以日,星期和月為單位檢視他們的時間表。這些選項本來可以在螢幕的背面提供給使用者,但是檢視日曆的不同部分是程式的主要功能,並且使用者可能會頻繁改變所關注的焦點。

再舉一個例子,“天氣”程式的主要功能是顯示一個城市的當前天氣狀況和6天之內的天氣預報。雖然讓使用者能夠選擇是以攝氏還是華氏為單位顯示溫度也很重要,但是使用者不太可能經常改變這個選項,因此,將它放在主使用者介面中並不合理。在“天氣”螢幕的背面提供溫標選項,就顯得既方便又不突兀。

支援複製和貼上

iPhone OS提供了編輯(或貼上板)選單,它支援在文字檢視,Web檢視和影象檢視中的“剪下”,“複製”,“貼上”,“選擇”和“全選”操作。一種向用戶顯示該選單的方法是,首先使用者觸控並按住裝置螢幕直到出現放大的檢視(該檢視允許使用者將插入點或選擇點移動到正確的位置),然後放開。如果當前的上下文支援這種選單,則當用戶擡起手指時它就會出現。選單中的“選擇”操作可以選擇檢視中的單詞或應用程式定義的項。使用者可以通過拖動當前所選區域的把手來擴大他們選擇的內容。在內容被選中之後,選單就會根據情況顯示“剪下”,“複製”或“貼上”。

您可以調整編輯選單的某些行為以適應您的應用程式。(要了解更多關於如何用編碼實現這些行為的資訊,請參考iPhone應用程式程式設計指南中的“複製和貼上操作”一節。)例如,您可以指定選單中顯示的操作,您可以改變選單出現的位置。但是,您不能控制選單本身的顏色和形狀。

編輯選單中可見的操作在當前上下文都是有意義的。例如,如果沒有任何內容被選中,選單中不會包含“複製”或“剪下”操作,因為這些操作要作用於被選中的內容。同樣,如果有內容被選中,選單則不包含“選擇”操作。如果您要在一個自定義檢視中支援編輯選單,您應該確保選單所顯示的操作適用於當前上下文。請注意,您不能在選單中顯示自定義的操作。

UIKit會根據可用空間的大小,在插入點或被選中內容的上方或下方顯示編輯選單,並放置選單指標,以便使用者可以看到選單操作是如何與當前內容相關聯的。您可以通過程式設計的方式,在選單出現之前決定它的位置,因此,在必要的情況下,您可以防止應用程式的使用者介面中的重要部分被選單遮住。

請注意,雖然“觸控並按住”這個操作是向用戶顯示編輯選單的主要方式,但是使用者也可以通過雙擊文字檢視中的一個單詞來選中它,同時顯示出選單。如果您要在自定義檢視中支援選單,那麼您應該對這兩種操作都做出響應。此外,您可以定義在使用者雙擊時預設被選中的物件。

如果一個按鈕執行的是編輯選單中已有的操作,則要避免建立這樣的按鈕。例如,要讓使用者執行復制操作的話,使用編輯選單比向用戶提供“複製”按鈕更好,因為使用者會很困惑,為什麼在您的應用程式中要有兩種方式來完成同樣的事情。

您可以啟用對靜態文字的選擇,但是應該僅當靜態文字顯示對使用者有用的內容時才這樣做。例如,使用者有可能想要複製一幅影象的標題,但是他們可能不想複製一個標籤項或螢幕標題的標籤,比如“帳戶”。在文字檢視中,預設應該是按單詞選取的。

按鈕的標題應該是不可以被選中的,因為很難不觸發按鈕的點選事件並顯示出編輯選單。一般來說,具有按鈕行為的元素不需要被選中。

如果您在自己的應用程式中支援“剪下”,“複製”和“貼上”操作,您也應該支援撤銷和重做(在介紹)。這是因為編輯選單不需要在動作執行前進行確認,而且如果使用者改變了主意,他們總是希望能夠撤銷最近的操作。

支援撤銷和重做

iPhone OS在文字檢視中為使用者提供了撤銷和重做的能力。使用者通過搖晃裝置發起撤銷動作,裝置會顯示一個警告,允許使用者撤銷他們剛才的輸入,重做先前未完成的輸入或取消撤銷操作。

UIKit允許您在自己的應用程式中以一種更通用的方式支援撤銷(有關如何在程式碼中實現這一行為的資訊,請參考撤銷架構)。您可以指定:

  • 使用者可以撤銷和重做的操作

  • 您的應用程式應該何時將一個搖晃事件理解為觸發撤銷

  • 支援多少層的撤銷

為了給您的應用程式中的撤銷和重做功能提供出色的使用者體驗,您應該:

  • 提供簡短的描述性的語言精確地向用戶描述他們正在撤銷或重做的內容。UIKit自動採用字串“撤銷”和“重做”作為撤銷警告按鈕的標題,但是您需要提供一至兩個單詞來描述使用者可以撤銷和重做的動作。(請注意,“取消”按鈕不能被改變。)例如,您可以提供文字“刪除姓名”或“地址變更”來建立如“撤銷刪除姓名”或“重做地址變更”這樣的的按鈕標題。

    一定要避擴音供過長的文字:過長的按鈕標題會被截斷,並且使用者很難解讀。此外,由於文字位於按鈕的標題中,因此要使用標題式的大寫方式,而且不要新增標點。(簡單地說,標題式的大寫方式是指每個單詞都大寫,但冠詞,並列連詞和四個或四個字母以下的介詞除外。)

  • 避免過載搖晃操作。即使您可以通過程式設計來制定您的應用程式何時將一個搖晃事件理解為觸發撤銷,但是如果搖晃可以用來執行另一個動作,使用者會感到迷惑。

    搖晃操作是使用者期望的發起撤銷和重做的主要方式,但是在適當情況下,您也可以在導航欄中包含系統提供的“撤銷”和“重做”按鈕。如果在您的應用程式環境中,明確地顯示一個專用按鈕來執行這些功能非常重要,則您可以採取這種做法,但這種情況很不常見。

  • 考慮您允許撤銷和重做的動作所處的環境。一般來說,使用者希望他們所做的更改和執行的動作能夠立即生效。撤銷和重做功能應該儘可能明確地關聯到使用者當前所處的環境,而非先前的環境。

啟用推送通知

當您的應用程式註冊了“蘋果推送通知服務”時,您可以在有新資料到來時向用戶發出警告,即使您的應用程式沒有執行。當裝置收到的訊息是發給一個沒有執行的應用程式時,它可以通過以下方式通知使用者:

  • 在應用程式的主螢幕圖示上更新一個 標記

  • 播放警告聲音

  • 顯示一條警告訊息

或者您可以組合使用以上方式。使用者的反應可能是啟動應用程式來處理新資料,或者僅僅是注意到有新資料到來就可以了。(要了解如何在程式碼中處理推送通知,請閱讀蘋果推送通知服務程式設計指南。)

注意:推送通知的投遞是無保證的。此外,使用者也可以拒絕接收系統範圍內的通知。推送通知的目的是提醒使用者有新資料到達,而不是向您的應用程式傳遞關鍵的資料。

內建的設定程式中的“通知”部分為每一個註冊了“蘋果推送通知服務”的應用程式提供推送通知的設定。針對每一個應用程式,iPhone OS都可以讓向用戶設定是否允許標記,聲音和警告訊息。

您應該花一些時間來思考哪種型別的事件更能讓通知引起使用者的注意。通知應該向使用者提供有用的,可操作的資訊,這些資訊是使用者即使在沒有使用您的應用程式時也想要得到的。

當您確定了使用者可能關心的事件之後,您還應該讓使用者決定每種事件應該產生什麼型別的通知(如果有通知的話)。如果使用者無法定製您的應用程式的推送通知,那麼使用者可能會被他們不感興趣的通知所打擾 。

使用者可以選擇他們想要接收的通知的型別,因此以下三種類型您應該全部支援:

  • 標記。 標記是一種對使用者打擾最小的方式,它告訴使用者有新的他們可能感興趣的內容出現。標記是一個紅色的小橢圓形,出現在主螢幕圖示的右上角。您對於標記的外觀沒有任何控制權,它僅包含數字,不包含字母和標點符號。

    標記適用於告訴使用者有多少項有待他們查閱。例如,標記中的數字表示的可能是未讀的訊息數,新分配的任務數,或當前有多少個遠端玩家正在進行遊戲。

  • 聲音。 您可以提供自定義的警告聲音,也可以使用內建的警告聲音。如果您建立了自定義的聲音,一定要保證它簡短,獨特並且製作專業。(要了解有關自定義聲音的技術要求,請參考蘋果推送通知服務程式設計指南中的“準備自定義警告聲音”一節。)請注意,當有通知被投遞時,您不能強制使裝置振動;使用者能夠控制收到警告時是否伴有振動。

    如果通知到達本身就為使用者提供了足以採取行動的資訊,在這種情勢下,採用一種容易辨識的聲音是非常適合的。例如,一個協同任務管理系統在成員的任務完成時可能會伴隨著一段獨特的聲音。僅僅是聽到這種聲音,使用者就知道任務已經完成了。

  • 警告。 警告是一種通知使用者有新內容時最打擾使用者的一種方式。在警告的頂端顯示您的應用程式的名稱,在它下面是您傳送的訊息,在警告底部有一至兩個按鈕。如果您指定了兩個按鈕,則警告會在左側顯示“關閉”按鈕,右側顯示“檢視”按鈕(使用者點選“檢視”按鈕可以在解除警告的同時啟動您的應用程式)。如果您只指定了一個按鈕,則警告只顯示一個“確定”按鈕。“關閉”按鈕和“確定”按鈕都會關閉警告而不會開啟您的應用程式。

    警告會打斷使用者的工作流程,因此最好謹慎地使用它,並且只用它來投遞有關某事件的簡短的,重要的訊息。特別地,一定要避免在您的警告訊息中包含任何廣告內容。

保證應用程式的可用性

一個易於使用的應用程式應該允許有障礙的使用者在輔助程式或裝置的幫助下可以成功使用。iPhone OS裝置包含許多功能,使所有使用者都可以更加方便地使用該裝置,比如視覺化語音郵件,縮放以及語音控制功能。您無需在應用程式中採取任何動作,使用者可以直接獲益於這些功能。

有了VoiceOver,事情就變得不一樣了。VoiceOver是蘋果公司一項創新性的螢幕閱讀技術,它讓使用者無需看到螢幕,就可以控制他們的裝置。為了確保VoiceOver使用者可以充分地使用您的應用程式,您可能需要提供一些關於使用者介面中檢視和控制元件的自定義資訊。

幸運的是,在預設情況下,UIKit控制元件和檢視是易於訪問的,因此,當您以完全標準的方式使用這些標準元素時,您只有很少的額外工作要做(如果有的話)。使用者介面的自定義程度越高,您需要提供的自定義資訊就越多,以便VoiceOver可以正確地向具有視覺障礙的使用者描述您的應用程式。

重要:為了使您的應用程式易於訪問,您要做的工作包括為VoiceOver提供它所需的資訊來幫助使用者使用您的應用程式。您需要為了適應VoiceOver而改變使用者介面的視覺設計。

讓您的iPhone應用程式易於被VoiceOver使用者訪問是非常正確的做法。這種做法還可以增加您的使用者群,並有可能幫助您滿足由各主管機構建立的可用性準則。

提供搜尋功能並顯示搜尋結果

UIKit提供了搜尋欄控制元件,您可以使用它顯示一致的啟動搜尋的介面,但要您需要在您的應用程式中實現搜尋功能。(要了解有關搜尋欄的更多資訊,請參考“搜尋欄”;要了解有關在程式碼中處理搜尋結果的更多資訊,請參考UISearchDisplayController類參考。)為了確保搜尋擁有實用而方便的使用者體驗,請花一些時間考慮如何實現搜尋過程以及如何顯示其結果。

一般來說,您應該:

  • 為您的資料建立索引,以便隨時進行搜尋。

  • 實時過濾本地的資料,一旦使用者開始輸入,您就顯示結果,並且隨著使用者繼續輸入而逐步縮小結果範圍。

  • 如果可能的話,在使用者輸入時也同時過濾遠端資料,但是,如果這部分的響應時間有可能將搜尋結果的計算推遲1-2秒鐘以上,一定要經過使用者的允許。

  • 在列表上面顯示搜尋欄或者在列表內顯示索引。

  • 避免為搜尋開啟一個標籤頁,除非它是您應用程式中的主要功能,應該被標識為一個不同的模式。

雖然實時過濾資料通常能夠產生出色的使用者體驗,但這並不總是可行的。如果無法實時過濾資料,您可以在使用者在鍵盤上點選“搜尋”按鈕之後再開始搜尋過程。如果您要這樣做,一定要提供有關搜尋進度的反饋資訊,以便讓使用者知道搜尋程序沒有停止。一種方法就是儘快顯示文字結果,併為那些可能需要更長時間檢索的資料顯示佔位符內容。

例如,在YouTube中,使用者點選“搜尋”按鈕發起視訊的搜尋。如果網路連線速度很慢,YouTube會先顯示“載入中……”訊息和旋轉的活動指示符,讓使用者知道搜尋正在進行。然後,YouTube會顯示一個結果列表,其中,每一行填寫搜尋的文字結果(比如視訊的標題和收視率),以及帶有虛線輪廓的立方體自定義影象。隨著使用者瀏覽視訊標題的列表,下載完的視訊縮圖會逐步替換掉原來的虛線立方體。像這樣,在更多的資料仍在下載時向用戶顯示部分搜尋結果,能夠及時地為使用者提供有用的資訊。

如果您處理的資料可以歸類於多個不同的類別,您可以提供一個範圍欄。範圍欄包含至多4個範圍按鈕,每個按鈕代表一種分類。例如,“郵件”程式提供了一個範圍欄,允許使用者將他們的搜尋集中在郵件的發件人,收件人或主題欄位,或者將搜尋範圍擴大至包含所有的欄位。如果範圍欄能夠幫助使用者集中他們的搜尋,或者能夠大大減小搜尋結果的數量,請您考慮使用範圍欄控制元件。(要了解如何在您的程式碼中實現範圍欄,請參考UISearchBar類參考。)

使用使用者的位置資訊

使用者喜歡能夠自動使用他們的物理位置對內容進行標記的功能,或者查詢當前在附近的朋友。使用者同時也希望當他們不想與他人分享自己的位置時能夠禁用這些功能。使用者可以通過“設定” > “一般”中的“位置服務”設定來選擇同意(或拒絕)系統範圍內對他們的物理位置的訪問。

如果使用者關閉了位置服務,而隨後使用的應用程式功能需要獲知他們的位置,則使用者會看到一個警告,此警告告訴他們必須改變他們的首選項設定才能使用此功能。該警告不允許使用者在應用程式的內部做此更改;相反,他們必須進入設定應用程式改變他們的首選項設定。這樣可以確保使用者充分意識到他們正在授予整個系統使用他們位置資訊的許可權。

為了讓使用者知道他們為什麼要開啟位置服務,您最好只在使用者試圖使用一項顯然需要獲知他們當前位置的功能時,才顯示警告。例如,當位置服務關閉時,使用者仍然可以使用地圖應用程式,但是,當他們訪問發現並跟蹤其當前位置的功能時,會看到警告。

如果位置服務處於關閉狀態,iPhone OS會在您的應用程式第一次試圖訪問位置資訊時顯示警告。Core Location框架為您提供了一種獲取使用者偏好設定的方法,使您避免不必要或不適當地觸發警告。(要了解關於這個程式設計介面的更多資訊,請參考Core Location框架參考。)

知道了使用者的偏好設定資訊,您就可以儘可能準確地為需要位置資訊的功能觸發警告,或是完全地消除警告。

  • 如果您的應用程式在沒有這些資訊的情況下無法執行它的主要功能,您最好在使用者啟動應用程式時儘快讓他們看到警告。使用者不會為此感到困擾,因為他們明白應用程式的主要功能依賴於知曉他們的位置。

  • 如果使用者的位置不是您應用程式基本功能的一部分,您可以選擇簡單地限制那些用到位置資訊的功能。例如,當位置服務關閉時,相機應用程式會自動關閉將使用者的位置新增到他們所拍攝的照片的功能。但應用程式並不會阻止使用者拍照,除非他們改變偏好設定的選項,這是因為“將位置資訊新增到照片”只是一個附加功能,而不是基本功能。

  • 如果某項功能需要位置資訊才能工作,一定要避免在使用者實際選擇該功能之前執行任何程式設計呼叫觸發警告。(獲取使用者偏好設定資訊的呼叫不會觸發警告。)這樣,您就可以避免讓使用者感到奇怪,為什麼您的應用程式在使用者做一些看似不需要位置資訊的事情時,想要得到他們的位置資訊。

處理方向的變化

使用者可以隨時旋轉iPhone OS裝置,並且他們期望正在瀏覽的內容做出適當的調整。在您的iPhone應用程式中,請務必:

  • 注意加速度表的值(關於加速度表和加速度表程式設計介面參考的更多資訊,請閱讀iPhone應用程式程式設計指南)。如果合適的話,您的應用程式應該對所有的裝置方向變化做出響應。

  • 如果您的應用程式使用者介面的某一部分只在一個方向上顯示內容,則該區域只適於在此方向上出現,而且不需要對裝置方向的變化做出響應。例如,當用戶選擇一個iPod視訊來觀看時,無論當前裝置方向如何,該視訊都橫向顯示。這向用戶表明,要旋轉裝置以便更好地觀看該視訊。該例中最重要的一點是,iPod沒有提供“旋轉”按鈕;相反,使用者知道要旋轉裝置,因為視訊是橫向顯示的。

    讓使用者旋轉裝置來正確地瀏覽應用程式使用者介面中需要特定方向的部分。避免建立新的控制元件或定義新的操作,告訴使用者旋轉裝置。

  • 利用一步操作就能改變方向的過程,完成更順暢且往往更快的旋轉。但是,如果您的屏幕布局非常複雜,當發生方向變化時,您可以選擇執行一種淡入淡出的轉換。要了解如何在您的程式碼中支援一步操作過程,請參考UIViewController類參考

  • 使用者經常因為想要“看到更多”而將他們的裝置旋轉為橫向。如果您只是按比例放大螢幕的內容,則無法滿足使用者的期望。相反,您應該重新打包文字行,而且如果必要的話,重新安排使用者介面的佈局,以便更多的內容填充到螢幕當中。

使用聲音

使用者期望iPhone OS裝置具有非常美妙的聲音,無論是作業系統的聲音(比如鈴聲和警告聲),還是應用程式的聲音(比如媒體播放,環境聲音和配樂)。此外,使用者還希望裝置發出的聲音能夠遵從他們的偏好和目的。

使用者決定聲音的音量,以及他們是否想要聽到這些聲音。但是有些時候,即使當前的設定表明使用者更傾向於靜音,他們還是希望聽到某些聲音。例如,使用者總是期望聽到他們設定的警告聲。從本質上講,使用者想要聽到他們期待聽到的聲音,而不願聽到他們不期待的聲音。

為了幫助您順應這樣的需求,iPhone OS提供了一些程式設計介面,您可以用來:

  • 描述您應用程式的聲音應該如何與裝置上的其他聲音保持一致。

  • 確保應用程式的聲音能夠按照使用者的期望進行播放。

在您決定如何處理應用程式中的聲音之前,您需要了解,當用戶調整裝置控制元件和使用外部裝置(如耳機和耳麥)時,他們期望應用程式和裝置如何運作。

振鈴/靜音切換—使用者的期望

如果使用者希望做到以下幾點,他們可以使用“振鈴/靜音”切換將他們的裝置靜音:

  • 避免被意外的聲音打擾,比如電話鈴聲和來信提示音。

  • 避免聽到使用者操作的附帶聲音,比如鍵盤或其它反饋的聲音,偶然的聲音或應用程式啟動的聲音。

  • 避免聽到遊戲的聲音,包括附帶的聲音和配樂,它們並不是使用遊戲程式所必需的。

例如,在劇場中,使用者會將他們的裝置切換至靜音狀態,以免打擾到劇場中的其他人。在這種情況下,使用者仍然想要使用他們裝置上的應用程式,但他們不想被不期望的或沒有明確要求的聲音嚇到,比如鈴聲或新訊息提示音。

但是,對於旨在產生聲音的使用者動作,“振鈴/靜音”切換會消除它們產生的聲音。例如:

  • 媒體應用程式中的媒體播放不會被“振鈴/靜音”切換靜音,因為媒體播放是使用者明確請求的。

  • 時鐘應用程式的警告不會被“振鈴/靜音”切換靜音,因為此警告是使用者明確設定的。

  • 語言學習程式中的音效素材不會被“振鈴/靜音”切換靜音,因為使用者採取明確行動想要聽到它。

  • 語音聊天程式中的會話不會被“振鈴/靜音”切換靜音,因為使用者啟動此類應用程式的唯一目的就是進行語音聊天。

這種行為遵循使用者控制的原則,因為是由使用者(而不是裝置)來決定聽到使用者明確請求的聲音是否合適。

音量按鈕—使用者的期望

使用者使用裝置的音量按鈕來調節裝置播放的所有聲音的音量,包括歌曲,應用程式的聲音和裝置的聲音。這意味著使用者可以隨時使用音量按鈕關閉任何聲音,無論“振鈴/靜音”切換的當前狀態如何。

在某些情況下,應用程式適宜在其介面為使用者提供音量設定功能。例如,YouTube顯示了一個音量滑動器,使用者可以用它調整正在觀看的視訊的音量。儘管YouTube正在執行,使用者可以交替使用此滑動器和音量按鈕來調整視訊的音量。這是因為在應用程式執行時,滑動器起到音量按鈕代理的作用:滑動器同時作用於應用程式的音量和整個系統的音量(鈴聲音量除外)。

如果您需要顯示音量滑動器,當您使用MPVolumeView類時一定要使用系統提供的滑動器。請注意,如果當前啟用的音訊輸出裝置不支援音量控制(比如A2DP裝置),音量滑動器將被相應的裝置名稱取代。

使用音量按鈕調整應用程式當前播放的音訊,也會同時調整整個系統的音量(鈴聲音量除外)。(在當前沒有播放任何音訊時,使用音量按鈕調整鈴聲的音量。)

這種行為遵循使用者控制的原則,因為使用者可以隨時決定裝置發出的聲音應該有多大。

有時候,應用程式可能需要調整相對和絕對音量級,以便在其音訊輸出中產生最佳的混合。但是,最終的音訊輸出的音量應該始終受到系統音量的控制,無論它是通過音量按鈕還是音量滑動器進行調整的。這就意味著,對應用程式音訊輸出的控制仍然掌握在它所歸屬的使用者的手中。

耳機和耳麥—使用者的期望

使用者插入耳機和耳麥就可以獲得私人的聲音體驗並且解放他們的雙手。在使用和不使用附件的情況下,使用者對應用程式的行為有著不同的期望。

當用戶插入耳機和耳麥時,他們是打算繼續聽當前的聲音,只是轉為私下收聽。因此,他們希望當前正在播放音訊的應用程式繼續播放此音訊。

當用戶拔下耳機和耳麥時,他們不想自動將正在收聽的內容分享給他人。因此,他們希望當前正在播放音訊的應用程式暫停播放,讓他們準備好之後顯式地重新開始播放。

無線音訊—使用者的期望

使用者非常喜歡無線耳機的便捷,比如藍芽A2DP裝置。人們使用無線耳機和耳麥的理由與使用有線耳機和耳麥的理由是一樣的:他們想要私下聽到聲音,並希望解放他們的雙手。

使用者對無線耳機的使用者體驗也有著非常類似的期望:

  • 當用戶連線到無線音訊裝置時,他們打算繼續聽到當前