Xamarin の watchOS メニュー コントロール (感圧タッチ)

Watch Kit には、watch アプリ画面に実装されたときにメニューをトリガーする感圧タッチ ジェスチャーが用意されています。

メニューが表示されている Apple Watch

感圧タッチへの対応

インターフェイス コントローラーの Menu が実装されている場合、ユーザーが感圧タッチを実行すると、メニューが表示されます。 メニューが実装されていない場合、画面は一時的にアニメーション化され、他のアクションは発生しません。

感圧タッチは画面上の特定の要素に関連付けされません。インターフェイス コントローラーにアタッチできるメニューは 1 つだけで、画面のどこで感圧タッチが押されるかに関係なく表示されます。

1 つから 4 つのメニュー オプションを表示できます。

メニューの追加

Menu は、デザイン時にストーリーボードの InterfaceController に追加する必要があります。 メニュー コントロールをインターフェイス コントローラーにドラッグすると、ストーリーボード プレビューに視覚的には表示されませんが、[ドキュメント アウトライン] パッドに メニュー が表示されます。

デザイン時のメニューの編集

メニュー コントロールには、最大 4 つのメニュー項目を追加できます。 これらは[プロパティ] パッドで構成できます。 次の属性を設定できます。

  • タイトル、および
  • カスタム イメージ、または
  • システム イメージ: Accept、Add、Block、Decline、Info、Maybe、More、Mute、Pause、Play、Repeat、Resume、Share、Shuffle、Speaker、Trash。

Action を作成するには、[プロパティ] パッドの [イベント] セクションを選択し、アクション メソッドの名前を入力します。 部分メソッドはコード内に作成されます。これは、次のようにインターフェイス コントローラー クラスに実装できます。

partial void MenuItemTapped ()
{
    Console.WriteLine ("A menu item was tapped.");
}

カスタム イメージ

iOS のタブ イメージと同様に、メニュー項目の画像には、背景を透けて表示できるアルファ チャネルを持つ不透明なパターンが必要です。

最適なパフォーマンスを得るために、メニューに使用するイメージを (watch アプリ拡張機能プロジェクトではなく) watch アプリ プロジェクトに追加する必要があります。

メニュー項目の変更

実行時の追加

実行時にインターフェイス コントローラーに Menu を追加することはできませんが、MenuItem のコレクションをプログラムで変更することは "できます"。 次に示すように、AddMenuItem メソッドを使用します。

AddMenuItem (WKMenuItemIcon.Accept, "Yes", new ObjCRuntime.Selector ("tapped"));

Xamarin.iOS Watch Kit API には現在、AdMenuItem メソッドの selector が必要です。これは次のように宣言する必要があります。

[Export("tapped")]
void MenuItemTapped ()
{
    Console.WriteLine ("The dynamically added 'Yes' menu item was tapped.");
}

実行時の削除

ClearAllMenuItems メソッドを呼び出して、"プログラムによって追加された" すべてのメニュー項目を削除できます。

ストーリーボードで構成されているメニュー項目はクリアできません。