Xamarin 中 watchOS 3 的快速互動技術
本文涵蓋 Apple 在 watchOS 3 中新增的快速互動技術,以及如何在 Xamarin.iOS for Apple Watch 中實作它們。
提供快速的使用者互動對於建立吸引人的Apple Watch 應用程式和複雜功能至關重要。 Apple 新增了 watchOS 3 的新功能,已新增對手勢辨識器的支持、數位皇冠的存取權,以及新的使用者通知和瀏覽技術。 這同時新增了 SceneKit 和 SpriteKit 的支援,可讓開發人員輕鬆建立快速且有回應性的豐富介面。
什麼是快速互動
對於用來為 iOS 或 macOS 建立應用程式的開發人員(使用者花費與應用程式互動的時間量是以分鐘或小時為單位),為 Apple Watch 設計成功的應用程式可能是一項挑戰,而且需要不同的方法。
在 watchOS 中,使用者通常想要舉起手腕,快速與應用程式互動(通常是幾秒鐘),然後放下手腕,繼續他們所做的一切。
以下是 Apple Watch 上一般快速互動的一些範例:
- 啟動定時器。
- 檢查天氣。
- 將項目標示為 Todo 清單。
若要達成這些目標,Apple Watch 上的應用程式必須是:
- 一 目了然 - 這表示使用者應能快速流覽,以取得所需的資訊。
- 可 採取動作 - 這表示使用者應該能夠快速、明智地做出決策。
- 回應式 - 這表示使用者不應該等到收到所需的資訊,或達到所需的動作。
快速互動長度
由於 Apple Watch 應用程式的一目了然本質,Apple 建議快速互動的理想長度應該是兩秒以下。 由於此兩秒的限制,開發人員需要花費相當多的時間來設計和實作Apple Watch應用程式。
新的 watchOS 3 功能和 API
Apple 已將數個新功能和 API 新增至 WatchKit,以協助開發人員將快速互動新增至其 Apple Watch 應用程式:
- watchOS 3 提供對新類型使用者輸入的存取,例如:
- 手勢辨識器
- 數位冠狀旋轉
- watchOS 3 提供顯示和更新資訊的新方式,例如:
- 增強型數據表導覽
- 新的使用者通知架構支援
- SpriteKit 和 SceneKit 整合
藉由實作這些新功能,開發人員可以確保其 watchOS 3 應用程式是「可快速」、「可採取動作」和「回應式」。
手勢辨識器支援
如果開發人員已在 iOS 中實作手勢辨識器,他們應該非常熟悉手勢辨識器在 watchOS 3 中的運作方式。 為了重新整理,手勢辨識器是將低階觸控事件剖析為可辨識、預先定義的手勢的物件。
watchOS 3 將支援下列四個手勢辨識器:
- 離散手勢類型:
- 撥動手勢 (
WKSwipeGestureRecognizer
)。 - 點選手勢 (
WKTapGestureRecognizer
)。
- 撥動手勢 (
- 連續手勢類型:
- 平移手勢 (
WKPanGestureRecognizer
)。 - 長按手勢 (
WKLongPressGestureRecognizer
) 。
- 平移手勢 (
若要實作其中一個新的手勢辨識器,只要將它拖曳到 Xcode 介面產生器中的檢視,並設定其屬性即可。
在程式代碼中,回應辨識器的動作,以處理使用者所觸發的手勢。 同樣地,這會以與 iOS 中處理的方式相同。
離散手勢狀態
針對離散手勢,當辨識手勢並指派狀態 (WKGestureRecognizerState
) 時,會呼叫動作:
所有離散手勢都會從 狀態開始 Possible
,並轉換成 Failed
或 Recognized
狀態。 使用離散手勢時,開發人員通常不會直接處理狀態。 相反地,它們會依賴只辨識手勢時所呼叫的動作。
連續手勢狀態
連續手勢與離散手勢稍有不同,其中動作會在辨識手勢時多次呼叫:
同樣地,連續手勢會以狀態開始 Possible
,但會進行多個更新。 在此,開發人員必須考慮辨識器的狀態,並在階段更新 Changed
應用程式的UI,直到手勢最終 Recognized
為或 Canceled
為止。
手勢辨識器使用方式 提示
Apple 在 watchOS 3 中使用手勢辨識器時建議下列專案:
- 將手勢辨識器新增至群組專案,而不是個別控件。 由於 Apple Watch 的實體螢幕大小較小,因此群組元素通常會更大且更容易被使用者點擊的目標。 此外,筆勢辨識器可能會與原生 UI 控件中已內建的手勢發生衝突。
- 在監看式應用程式的分鏡腳本中設定相依性關聯性。
- 某些手勢優先於其他手勢類型,例如:
- 捲動
- 強制觸控
數位冠狀旋轉
藉由在 watchOS 3 應用程式中實作 Digital Crown Support,開發人員可以為使用者提供更高的流覽速度和精確度互動。
由於 watchOS 2,Apple Watch 應用程式的 可以使用 WKInterfacePicker
物件來存取 Digital Crown,方法是提供 WKPickerItems
清單和選擇器樣式(清單、堆疊或影像序列)。 watchOS 接著允許使用者使用 Digital Crown 從清單中選取專案。
使用 WKInterfacePicker
時,WatchKit 會透過下列方式處理大部分的工作:
- 繪製清單和個別介面專案。
- 處理 Digital Crown 事件。
- 選取專案時呼叫動作。
監看OS 3 的新手開發人員現在可以直接存取 Digital Crown 旋轉事件,讓他們能夠建立自己的UI元素來響應旋轉值。
Digital Crown 存取是由下列元素提供:
WKCrownSequencer
- 提供每秒輪替的存取權。WKCrownDelegate
- 提供旋轉差異事件的存取權。
每秒旋轉數
使用以物理為基礎的動畫時,從 Digital Crown 存取每秒旋轉很有用。 若要存取每秒旋轉次數,請使用 CrownSequencer
Watch Extension 的 WKInterfaceController
屬性。 例如:
var rotationsPerSecond = CrownSequencer.RotationsPerSecond;
旋轉差異
使用 Digital Crown 中的旋轉差異來計算旋轉次數。 CrownDidRotate
使用 的 WKCrownDelegate
override 方法來存取 Rotational Deltas。 例如:
using System;
using WatchKit;
using Foundation;
namespace MonkeyWatch.MonkeySeeExtension
{
public class CrownDelegate : WKCrownDelegate
{
#region Computed Properties
public double AccumulatedRotations { get; set;}
#endregion
#region Constructors
public CrownDelegate ()
{
}
#endregion
#region Override Methods
public override void CrownDidRotate (WKCrownSequencer crownSequencer, double rotationalDelta)
{
base.CrownDidRotate (crownSequencer, rotationalDelta);
// Accumulate rotations
AccumulatedRotations += rotationalDelta;
}
#endregion
}
}
在這裡,應用程式會維護累積器 (AccumulatedRotations
) 以判斷輪替數目。 數位皇冠的一個完整旋轉等於累積 1.0
的差異,半旋轉將是 0.5
。
Apple 已由開發人員決定輪替計數如何對應至要更新之UI元素上變更的敏感度。
Rotational Delta 的正負號表示+/-
使用者正在翻轉 Digital Crown 的方向:
如果使用者向上捲動,WatchKit 會傳回正差異,如果向下卷動,則會傳回負差異,無論使用者穿上手錶的方向為何。
數位冠狀焦點
就像任何其他介面元素一樣,Digital Crown 具有 Focus 的概念。 此焦點可以根據使用者與手錶的互動方式,從 Digital Crown 移轉至其他介面元素。
例如,下列任一控件可能會竊取 Digital Crown 的焦點:
- Picker
- 滑桿
- 捲動控制器
開發人員必須判斷其自定義介面元素何時必須是 Digital Crown 的焦點。 Apple 建議使用新的手勢辨識器,在自定義 UI 元素中取得焦點。
垂直分頁
使用者在 watchOS 應用程式中巡覽數據表檢視的標準方法是捲動至所需的數據片段、點選特定數據列以顯示詳細檢視、在完成檢視詳細數據時點選 [上一頁] 按鈕,然後針對他們感興趣的任何其他資訊重複此程式:
監看OS 3的新功能,開發人員可以在其 [數據表檢視] 控件上啟用垂直分頁。 啟用此功能后,使用者可以捲動以尋找數據表檢視數據列,然後點選該數據列來檢視其詳細數據。 不過,他們現在可以向上撥動以選取數據表中的下一個數據列,或向下選取上一列(或使用 Digital Crown),而不需要先返回數據表檢視:
若要啟用此模式,請在 Xcode 中開啟 watchOS 應用程式的分鏡腳本以進行編輯,選取 [數據表檢視] 並核取 [垂直詳細數據分頁 ] 複選框:
請確定數據表使用 Segues 來顯示詳細檢視,並將變更儲存至分鏡腳本,並返回 Visual Studio for Mac 進行同步處理。
開發人員可以使用下列程式代碼,針對數據表檢視,以程式設計方式將垂直分頁與特定數據列互動:
// Segue into Vertical Paging and select the first row
MenuTable.PerformSegue (0);
使用垂直分頁時,開發人員必須注意 WatchKit 會自動處理控制器的預先載入,因此,在實際顯示 UI 之前,可以呼叫某些控制器生命週期方法。
通知增強功能
通知是快速互動的主要形式,使用者通常會在 watchOS 上體驗,且自第一個 Apple Watch 和 watchOS 1 以來一直可供使用。
典型的通知快速互動如下所示:
- 收到新的通知時,使用者會感受到通知觸覺。
- 他們舉起手腕來查看通知的簡短外觀介面。
- 如果他們繼續保持手腕抬起,watchOS 會自動轉換成 Long Look Notification 介面。
使用者有數種方式可以回應通知:
- 針對妥善定義的和呈現的通知,使用者不會執行任何動作,並直接關閉通知。
- 他們也可以點選 [通知] 來啟動 watchOS 應用程式。
- 針對支援自定義動作的通知,用戶可以選取其中一個自定義動作。 這些可以是:
- 前景動作 ─ 這些動作會啟動應用程式來執行動作。
- 背景動作 - 一律路由傳送至 watchOS 2 中的 i 電話,但可以路由傳送至 watchOS 3 中的 watchApp。
watchOS 3 的新功能:
- 通知在所有平臺上都使用類似的 API(iOS、watchOS、tvOS 和 macOS)。
- 本機通知可以在Apple Watch上排程。
- 如果背景通知已排程在Apple Watch上,則會路由傳送至應用程式的延伸模組。
通知排程和傳遞
使用者 i 電話 的通知會在發生下列情況時轉寄至 Apple Watch:
- i 電話 的畫面已關閉。
- 蘋果手錶正在穿,已經解除鎖定。
在 watchOS 3 中,本機通知可以排程在 Apple Watch 上,而且只會在手錶上傳遞。 開發人員可以排程應用程式的對應 i 電話 通知。
藉由在Apple Watch和i 電話 版本的通知中包含相同的通知標識碼,它可防止在手錶上顯示重複的通知。 通知的 Apple Watch 版本將優先於 i 電話 版本。
由於 watchOS 3 使用與 iOS 10 相同的 UINotification
API 架構,如需詳細資訊,請參閱 iOS 10 使用者通知架構 檔。
使用 SpriteKit 和 SceneKit
除了 watchOS 3,開發人員現在可以在其應用程式的使用者介面設計中使用 SpritKit 和 SceneKit 物件來呈現 2D 和 3D 圖形。
已新增兩個新的介面類別,以支援這項功能:
WKInterfaceSKScene
- 使用 SpriteKit 2D 圖形。WKInterfaceSCNScene
- 用於使用 SceneKit 3D 圖形。
若要使用這些物件,只要將它們拖曳到 Xcode 介面產生器中監看應用程式分鏡腳本內的設計介面,並使用 屬性偵測器 來設定它們。
從此開始,使用SpriteKit或 SceneKit 場景的運作方式與iOS 應用程式內的相同。 監看應用程式會藉由呼叫其中Present
一種方法來呈現 WKInterfaceSKScene
。 針對 SceneKit,只要設定 Scene
物件的 屬性 WKInterfaceSCNScene
即可。
可採取動作的複雜功能
在 watchOS 2 中,Apple 推出了第三方應用程式的複雜功能。 在 watchOS 3 中,Apple 擴充了開發人員可以在 WatchKit 複雜功能中包含的能力。
此外,更多的內建手錶臉部現在可以包括複雜症和現有的手錶臉,已經支援併發症現在可以包含更多的併發症。
此外,用戶還能夠快速向左或向右撥動,以轉換他們安裝在Apple Watch上的所有手錶臉部。 在 Apple Watch 的隨附 i 電話 應用程式上使用新的資源庫,使用者可以新增和自定義新的手錶臉部,以及他們可以包含的任何複雜功能。
由於這些功能,Apple 建議 Apple Watch 上的每個應用程式也應該包含至少一個併發症,因此,所有的原生 Apple Watch 應用程式現在都有併發症。
複雜功能為應用程式提供下列功能:
- 它們一目了然,因為它們總是出現在手錶臉上。
- watchOS 經常更新併發症。 任何包含使用者目前顯示手錶臉部複雜功能的應用程式,至少每小時更新兩次。
- 任何在使用者目前顯示監看臉上具有複雜功能的應用程式都會保留在記憶體中,讓應用程式快速啟動,並改善應用程式回應的速度。
- 複雜功能可讓用戶輕鬆地在 watchOS 應用程式中啟動特定功能。
可流覽的通知
Apple Watch 上的通知提供絕佳的可自定義方式,可快速通知使用者事件或新資訊,例如傳入訊息,或在鍛煉應用程式中達成目標。
藉由使用通知,即可快速向用戶呈現重要資訊。 在許多情況下,設計良好的通知可以移除用戶實際啟動應用程式的必要性。
觀看OS 3 的新功能,所有通知現在都支援:
- SpriteKit
- SceneKit
- 內嵌視訊
使用SpriteKit和 SceneKit 增強的UI
一般而言,當提到SpriteKit和SceneKit時,開發人員可能會想到遊戲UI。 不過,SpriteKit 和 SceneKit 都可用於建立非遊戲 UI,其中包含單獨 WatchKit 中無法執行的自定義版面配置、內容和動畫。
例如,來自相片共用應用程式的使用者通知可以使用SpriteKit來提供豐富的用戶體驗,包括張貼圖片的使用者以及實際影像和其他可豐富用戶體驗的自定義資訊。
此外,SpriteKit 和 SceneKit 都可以與應用程式使用者介面設計中的標準 WatchKit UI 元素混合。
簡單導覽
watchOS 3 提供數種方式,可讓開發人員簡化其 watchOS 應用程式中的流覽,例如上面呈現的新 垂直分頁、 手勢辨識器支援 和 數位皇冠旋轉 功能。
Digital Crown 對 Apple Watch 而言是獨一無二的,可透過許多不同的方式來簡化流覽。 例如,定時器應用程式可以使用 Digital Crown 來清除可用的定時器長度。
自定義手勢可以呈現使用者與監看式應用程式互動的新獨特方式,也可以用來簡化應用程式流覽。
Apple 建議尋找結合 watchOS 3 中新增的所有新快速互動功能,以呈現豐富、簡單且快速使用 watchOS 應用程式介面的方法。
完成快速互動
設計良好的快速互動體驗可讓使用者在完成目前的互動時,有信心放棄手腕(並與應用程式脫離)。
當監看應用程式執行任何類型的網路連線,或與其隨附 i 電話 應用程式共用資訊時,就會特別成為問題所在。 這通常會在交易進行時導致等候指標,這在快速互動期間並不理想。 以下列範例為例:
- 用戶選擇要在手錶上購買的專案。
- 他們點選 [購買] 按鈕。
- 應用程式會啟動網路交易,並顯示載入指示器。
- 一段時間后,交易就會完成,而應用程式會顯示購買一致性。
- 使用者放下手腕,與應用程式脫節。
當用戶點選購買按鈕直到交易完成時,他們的手腕抬起看著載入指示器。 為了解決此問題,Apple 建議開發人員應該向用戶顯示立即意見反應,而不是顯示載入指示器。
使用 Apple 建議的模型,再次查看相同的快速互動:
- 用戶選擇要在手錶上購買的專案。
- 他們點選 [購買] 按鈕。
- 應用程式會啟動網路交易,並顯示訊息,指出購買已成功啟動。
- 使用者放下手腕,與應用程式脫節。
- 交易在一段時間后成功完成時,應用程式會顯示本機通知,以通知使用者成功購買。
這一次,一旦用戶點選購買按鈕,他們就會看到一則訊息,指出購買已經開始,這樣他們就可以自信地放下手腕,並結束此時的快速互動。 之後,他們會收到使用者通知中交易成功或失敗的通知。 如此一來,使用者只會在程式的「作用中」階段與應用程式互動。
對於進行網路功能的應用程式,他們可以使用背景 NSURLSession
來處理與下載工作的網路通訊。 這可讓應用程式在背景中喚醒,以處理下載的資訊。 對於需要背景處理的應用程式,請使用背景工作判斷提示來處理必要的處理。
快速互動設計 提示
由於快速互動所需的長度是兩秒以下,開發人員應該從設計程式一開始就專注於應用程式的互動設計。 尋找可以簡化這些互動的區域(使用上述技術),並使用 watchOS 3 的新功能,讓應用程式快速且回應。
Apple 建議下列事項:
- 藉由將應用程式最常用的功能向前介紹,專注於快速互動。
- 使用複雜功能和使用者通知來呈現常見的特性和功能。
- 使用 SceneKit 和 SpriteKit 建立豐富、可瀏覽的使用者介面。
- 盡可能簡化應用程式內的流覽。
- 永遠不要讓使用者等待,讓他們放下手腕,並儘快與應用程式脫節。
摘要
本文涵蓋 Apple 在 watchOS 3 中新增的快速互動技術,以及如何在 Xamarin.iOS for Apple Watch 中實作它們。