【iPhone】ショートカットで汎用的に使えるトグルボタン

以下のブログ記事で知ったんですが、iPhoneの「計算式」アクションは、ビット演算(論理演算,ビットシフト)もできるんですね。(ということは、スポットライト検索でもできるということだ)


排他的論理和(XOR:eXclusive OR) も計算できるということなので、今回はそれを使ってショートカット中で汎用的に使えるトグルボタン(スイッチ)なるものを作ってみました。

1. ショートカットの取得

ショートカットは以下リンクからダウンロードできます。

toggle button


なお、実行前に、iCloud Driveの中の Shortcutsフォルダに「togglebuttons.json」というファイルがないことを確認しておいてください。(ファイルAppを使えば簡単に確認できます)

ファイル「togglebuttons.json」が既に存在している場合はそのままだとそのファイルに書き込みを行なってしまうので、ダウンロードしたショートカットのレシピ冒頭の "file-path"の値を「togglebuttons.json」から変更するようにしてください。勿論、Shortcutsフォルダに既にある名前(拡張子が異なれば大丈夫ですが)とは異なる名前にする必要があります。


2. 基本的な使い方

以下のようにして「ショートカットを実行」アクションを使って実行すると、結果として0と1の値を交互に返します。ただそれだけ。

画像1


基本的には、「おやすみモードを設定」アクションや、「Wi-Fiを設定」アクションのような"切り替え"が出来ないものと組み合わせて使うのがいいと思います。

例えば以下のような感じ。

画像2


3. ボタンを複製する

以下の手順に従って、Wi-Fi切り替え用のボタン, おやすみモード切り替え用のボタン, ...とボタンをいくつも用意することが出来ます。

(1) ショートカットを複製

画像3


(2) ショートカット名をわかりやすいものに変える
(例:おやすみモードボタン, Wi-Fiボタン)

画像4


(3) 「辞書」鍵の"button" を変更して新規で作る
ボタンの名前にする。
(なお名前にドット(.)は使えませんので注意)

画像5

※ 既存のボタン名と被っていると新しいボタンにならないので注意


(4) あとは使うだけ

画像6


4. 使わなくなったボタンを削除する

レシピ冒頭にある「辞書」の"is-enabled"の値を偽(false)に設定したあとで実行するとボタンを削除することができます。

画像7


また、ボタンを削除した結果、有効なボタン数が0になった時はファイルごと削除されます。

画像8


5. 仕組みの概要

以下のような内容のJSONファイルで複数のボタンの状態を保持・管理しています。

togglebuttons.json

{"おやすみモード":0,"button":0,"Wi-Fiボタン":1}


3. の手順(3)で変更した「ボタン名」というのが、上のJSONファイルのキーに対応しています。

ショートカットが実行されると、先ずは上のJSONファイルを読み込み、そこから「辞書」を取得します。

そうしたら次は、取得した辞書から「ボタン名」の値を取得します。取得した値は現在のボタンの状態を表しています。(0ならOFF, 1ならON)

そして、取得したボタンの状態(0または1)と1の排他的論理和を計算します。

「0 XOR 1」の結果は1に、「1 XOR 1」の結果は0になりますから、結果の値でボタンの状態を更新してあげることで、

「ボタンのオフとオン(ゼロイチ)の切り替え」

というものが実現できます。

※ 「0 XOR 1」「1 XOR 1」と言った時の0や1はここでは(「計算式」アクションでは)10進数であるということに注意してください。計算自体はこれらのメモリ上での表現(ビット列)の各桁に対して行われています。


あとはそうして更新した「辞書」をファイルに書き込み(上書き)すれば、ボタンの切り替えをしつつ、その結果(0か1)を保持することができます。

つまり、切り替え前のボタンの状態が0なら1が、1なら0が書き込まれるということです。ファイルAppを使うとファイルの中身が簡単に確認できますから、何度か実行してみてファイルの中身を見ると、切り替わっているのが確認できると思います。


6. その他の切り替え方法

別に排他的論理和なんて使わなくても「スイッチのようなもの」を作ることはできます。

2つ例を挙げておきます。

・「1 - 入力(0か1)」の結果を返す
 
e-Wordsのトグルの説明にも載っている方法です。ショートカットのレシピは例えば以下のようになると思います。(いちいちファイルを用意するのが面倒なので、クリップボードをテンポラリなファイルの代わりに使用しています)

Clipboard Toggle

画像9

※ クリップボードに0か1をコピーしてから実行する必要があります。


・if文を使う
 
直感的でわかりやすい。0や1でなく、"ON"や"OFF"といった文字列を返すようにしてもいいと思います。

Clipboard Toggle

画像10

※ クリップボードに0か1をコピーしてから実行する必要があります。


7. まとめ

今回はショートカットを使った簡単なトグルボタン(スイッチ)の紹介を行いました。

これを使うと、音ゲーおやすみモードのオートメーションを1つにまとめたりできます。

おやすみモードの切り替えのように、自分が使いたい機能がない(どうやら出来なさそう?)と思ったときは、自分で作ってしまうのが手っ取り早いですね。

それで「おやすみモード」で出来たら、今度はそれを汎用的に外から使えるようにしておきます。そうすれば、後から似た機能が欲しくなった時に便利ですよね。(例えば、Wi-Fi用をわざわざ作り直したりする必要がなくなる)

また、必要なら現在のボタンの状態を全て取得するショートカットを作ったりしてもいいと思います。ファイル名を指定して辞書として読み込めば簡単に作れるはずです。

では今回はこの辺で。

この記事が気に入ったらサポートをしてみませんか?