Xamarin 中的 watchOS 併發症
watchOS 可讓開發人員撰寫手錶臉部的自定義複雜功能
此頁面說明可用的不同複雜類型,以及如何將複雜功能新增至 watchOS 3 應用程式。
請注意,每個 watchOS 應用程式只能有一個併發症。
從閱讀 Apple 的檔案 開始,以判斷您的應用程式是否適合複雜的問題。 有 5 CLKComplicationFamily
種類型的顯示器可供選擇:
應用程式只能實作一個樣式,或全部五個樣式,視顯示的數據而定。 您也可以支持時間旅行,提供過去和/或未來時間的值,因為用戶開啟 Digital Crown。
新增複雜功能
組態
建立期間可將複雜功能新增至監看式應用程式,或手動新增至現有的解決方案。
新增專案...
[ 新增專案... 精靈] 包含複選框,可自動建立複雜控制器類別並設定 Info.plist 檔案:
現有專案
若要將複雜功能新增至現有的專案:
- 建立新的 ComplicationController.cs 類別檔案,並實作
CLKComplicationDataSource
。 - 設定應用程式的 Info.plist 來公開複雜度,以及支援哪些複雜家族的身分識別。
下列步驟詳述如下。
CLKComplicationDataSource 類別
下列 C# 範本包含實作 的最低 CLKComplicationDataSource
必要方法。
[Register ("ComplicationController")]
public class ComplicationController : CLKComplicationDataSource
{
public ComplicationController ()
{
}
public override void GetPlaceholderTemplate (CLKComplication complication, Action<CLKComplicationTemplate> handler)
{
}
public override void GetCurrentTimelineEntry (CLKComplication complication, Action<CLKComplicationTimelineEntry> handler)
{
}
public override void GetSupportedTimeTravelDirections (CLKComplication complication, Action<CLKComplicationTimeTravelDirections> handler)
{
}
}
請遵循撰寫複雜指示,將程式代碼新增至此類別。
Info.plist
監看式延伸模組的 Info.plist 檔案應該指定您想要支援哪些複雜系列的名稱 CLKComplicationDataSource
:
[ 資料源類別 ] 專案清單會顯示子類別子類別包含複雜邏輯的類別 CLKComplicationDataSource
名稱。
CLKComplicationDataSource
所有複雜功能都會在單一類別中實作,從抽象類覆寫方法 CLKComplicationDataSource
(實作 ICLKComplicationDataSource
介面)。
必要方法
您必須實作下列方法來執行複雜作業:
GetPlaceholderTemplate
- 傳回組態期間使用的靜態顯示,或當應用程式無法提供值時。GetCurrentTimelineEntry
- 計算複雜狀況執行時的正確顯示。GetSupportedTimeTravelDirections
- 從 傳回選項CLKComplicationTimeTravelDirections
,例如None
、Forward
、Backward
或Forward | Backward
。
隱私權
顯示個人資料的併發症
GetPrivacyBehavior
-CLKComplicationPrivacyBehavior.ShowOnLockScreen
或HideOnLockScreen
如果此方法傳 HideOnLockScreen
回,當手錶鎖定時,複雜狀況會顯示圖示或應用程式名稱(而非任何數據)。
更新
GetNextRequestedUpdateDate
- 傳回作業系統下次查詢應用程式以取得更新複雜顯示數據的時間。
您也可以從 iOS 應用程式強制更新。
支持時間旅行
時間移動支援是選擇性的,並由 GetSupportedTimeTravelDirections
方法控制。 如果傳回 Forward
、 Backward
或 Forward | Backward
,則您必須實作下列方法
GetTimelineStartDate
GetTimelineEndDate
GetTimelineEntriesBeforeDate
GetTimelineEntriesAfterDate
撰寫複雜功能
複雜度範圍從簡單的數據顯示到具有時間旅行支援的複雜影像和數據轉譯。 下列程式代碼示範如何建置簡單的單一範本複雜功能。
範例程式碼
此範例僅支援 UtilitarianLarge
範本,因此只能在支援該複雜類型的特定監看臉上選取。 在手錶上選取複雜功能時,會顯示 MY COMPLICATION,並在執行時顯示分鐘小時文字(時間的一部分)。
[Register ("ComplicationController")]
public class ComplicationController : CLKComplicationDataSource
{
public ComplicationController ()
{
}
public ComplicationController (IntPtr p) : base (p)
{
}
public override void GetCurrentTimelineEntry (CLKComplication complication, Action<CLKComplicationTimelineEntry> handler)
{
CLKComplicationTimelineEntry entry = null;
var complicationDisplay = "MINUTE " + DateTime.Now.Minute.ToString(); // text to display on watch face
if (complication.Family == CLKComplicationFamily.UtilitarianLarge)
{
var textTemplate = new CLKComplicationTemplateUtilitarianLargeFlat();
textTemplate.TextProvider = CLKSimpleTextProvider.FromText(complicationDisplay); // dynamic display
entry = CLKComplicationTimelineEntry.Create(NSDate.Now, textTemplate);
} else {
Console.WriteLine("Complication family timeline not supported (" + complication.Family + ")");
}
handler (entry);
}
public override void GetPlaceholderTemplate (CLKComplication complication, Action<CLKComplicationTemplate> handler)
{
CLKComplicationTemplate template = null;
if (complication.Family == CLKComplicationFamily.UtilitarianLarge) {
var textTemplate = new CLKComplicationTemplateUtilitarianLargeFlat ();
textTemplate.TextProvider = CLKSimpleTextProvider.FromText ("MY COMPLICATION"); // static display
template = textTemplate;
} else {
Console.WriteLine ("Complication family placeholder not not supported (" + complication.Family + ")");
}
handler (template);
}
public override void GetSupportedTimeTravelDirections (CLKComplication complication, Action<CLKComplicationTimeTravelDirections> handler)
{
handler (CLKComplicationTimeTravelDirections.None);
}
}
複雜範本
每個複雜樣式都有許多不同的範本可供使用。 Ring 範本可讓您在複雜功能周圍顯示進度樣式的環形,可用來以圖形方式顯示進度或其他值。
Apple 的 CLKComplicationTemplate 檔
圓形小型
這些樣本類別名稱前面都加上 CLKComplicationTemplateCircularSmall
:
- RingImage - 顯示單一影像,周圍有進度環。
- RingText - 顯示單行文字,其周圍有進度環。
- SimpleImage - 只顯示小型單一影像。
- SimpleText - 只顯示一小段文字。
- StackImage - 顯示影像和文字行,另一行上方
- StackText - 顯示兩行文字。
模組化小型
這些樣本類別名稱前面都加上 CLKComplicationTemplateModularSmall
:
- ColumnsText - 顯示文字值的小型方格(2 個數據列和 2 個數據行)。
- RingImage - 顯示單一影像,周圍有進度環。
- RingText - 顯示單行文字,其周圍有進度環。
- SimpleImage - 只顯示小型單一影像。
- SimpleText - 只顯示一小段文字。
- StackImage - 顯示影像和文字行,另一行上方
- StackText - 顯示兩行文字。
模組化大型
這些樣本類別名稱前面都加上 CLKComplicationTemplateModularLarge
:
- 數據 列 - 顯示包含 2 個資料行的 3 個資料列的網格線,選擇性地包含每個數據列左邊的影像。
- StandardBody - 顯示粗體標頭字串,其中包含兩列純文本。 標頭可以選擇性地在左側顯示影像。
- Table - 顯示粗體標頭字串,其下方有 2x2 的文字網格線。 標頭可以選擇性地在左側顯示影像。
- TallBody - 顯示粗體標頭字串,其下方有較大的字型單行文字。
功利小
這些樣本類別名稱前面都加上 CLKComplicationTemplateUtilitarianSmall
:
- 一般 - 在單行上顯示影像和部分文字(文字應該是短)。
- RingImage - 顯示單一影像,周圍有進度環。
- RingText - 顯示單行文字,其周圍有進度環。
- 方形 - 分別顯示 38mm 或 42mm Apple Watch 的方形影像(40px 或 44px 方形)。
功利大
此複雜樣式只有一個範本: CLKComplicationTemplateUtilitarianLargeFlat
。
它會顯示單一影像和部分文字,全都在單行上。