日付を表示するなら「カレンダー」アプリのアイコンなりウィジェットなりで済む話ではあります.
しかしホーム画面の整理次第では置けない, 置きたくない…なんてことがあります.
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS14.4.1
スポンサーリンク
壁紙にテキストを重ねる
アイデアとしては, 先日紹介した方法を使います.
予め用意した数字などの透過画像を, 壁紙の上に重ねます.
例えば画面左上, ステータスバーの下に表示するよう作ってみます.
レシピ
ではレシピの紹介となります.
壁紙はもちろん数字などの透過画像はすべて「ファイル」アプリに予め保存されているという想定になります.
今回は日付と曜日を表示させます, なので0から9までの数字に加え, 半角のスラッシュ, そして曜日を指す7つの漢字, 計18個の透過画像を用意しておきます.
まず基本的な情報・ステータスを「辞書」アクションにまとめておきます.
透過画像として用意したフォルダのパス, 元となる壁紙, そして重ねる際の基準となる位置(X,Y座標)の4つです.
その時々に書いてもいいですが初めてにまるごと置いておくことで後で変更するのが楽になります.
まずは壁紙を読み込んで「壁紙」と名付けた変数に代入します.
以後この変数「壁紙」を上書きし, 壁紙設定することになります.
ここで少し脱線して「辞書」アクションの値の取り出しについて.
辞書の値を得るには「辞書の値を取得」アクションがありますが, 条件によってはそのアクションが不要となります.
例えば「テキスト」アクションに出力することを考えます.
マジック変数で対象の辞書を選択すると画面下にメニューが出ますから, 「キーの値を取得」の項目をタップします.
ポップアップに取得したい値のキーを入力して「OK」をタップします.
これで対象のマジック変数は選択した辞書そのものでなく, その辞書の対応するキーの値として出力されます.
一見便利ですが, 辞書が複数あるとどの辞書のものなのかわからない…といったデメリットがあります.
また上記のキー入力でマジック変数は使えません, そのため繰り返し処理でキーに変数や繰り返し項目などを選択することができません.
話をレシピに戻します, メインの壁紙を変数に設定したところまで行いました.
ここからは実際に文字や記号を重ねていきます.
まずは適当な変数(今回はtmp)にX座標の値を設定します.
今回は横一列に文字を表示させますから, X座標は重ねる画像ごとに異なり, Y座標は基本的に固定です.
各透過画像を並べて表示したいわけですから, 例えば2枚目の画像は最初に設定したX座標の値に1枚目の画像の横幅を加えたものと言えます.
その値をtmpを使って制御するわけですね.
というわけでまず文字を一つひとつ見たいので現在の日付を1文字ごとに分割します.
ここで現在の日付はフォーマットをカスタムにした上でそのカスタムフォーマットを
yyyy/MM/dd
に変更しています, ようは例えば2021/03/25 という表示になるようにフォーマットを指定しています.
曜日は今回は敢えて別処理にしています.
こうして取得した日付の文字列を1文字ずつ「各項目を繰り返す」で処理していきます.
繰り返しの中ではまず繰り返し項目が数字かどうかで類別します.
「入力から数字を取得」アクションは対象の文字が数字の場合自分自身を返し, そうでない場合は「いいえ」を返します.
こうしてフィルタした結果を更に「種類を取得」にかけます, 対象が数字ならこの結果は「数字」, 数字でないなら「数字を取得」で「いいえ」だったのでこの出力は「ブール値」になります.
というわけで1文字ずつ分割した文字が数字かそれ以外か…で処理を分けます.
まずは数字だった場合.
実は予め保存しておいた数字の透過画像はすべて
対応する数字.png
としておきました.
こうすることで繰り返し処理の際繰返し項目の変数を使って
Shortcuts/~/"繰返し項目".png
を読むことで画像の読み込みがわかりやすくなるからです.
こうして読み込んだ透過画像を「イメージを重ねて表示」アクションで「壁紙」変数の上に重ねます.
「イメージエディタを表示」をオフにし, 「位置」をカスタムにした上でX座標を変数tmp, Y座標は最初の辞書アクションの「Y座標」キーの値にします.
この結果を「壁紙」変数に上書き, 更にtmp変数を更新します.
15足しているのは今回用意した数字の透過画像の横幅を15ピクセルで作ったからです.
数字はこれで終わりなのでその他の文字です.
同じif文の「その他の場合」に同じようにアクションを追加していきます.
今回は曜日を除く数字以外の文字は半角スラッシュだけです.
最後に曜日を追加します.
日付とちょっとだけ離したいのでtmpの値をちょっと多めに足してあります.
そして対応する曜日の画像を取得します.
上と同じようにマジック変数で「現在の日付」をカスタムフォーマットで EEE と書くことで曜日(例えば木曜日の「木」)を取得できるため, 日時と同様, 曜日のファイル名も例えば「日.png」として保存しておけば扱いやすくなります.
この画像を「壁紙」変数の上に重ねます.
その前に予め作った曜日の透過画像が数字のそれと若干上下がずれていたため, 調整のために予め「計算式」アクションで微調整した上で「イメージを重ねて表示」のY座標に指定しています.
これで必要な作業が出来ました.
最後に重ねまくった「壁紙」変数を使って壁紙に設定します.
実行してみるとこんな感じ.
フォントが極端に違うと違和感が出るかもしれないのでできれば合わせた方が良さそうです.
オートメーションで自動実行
折角作ったこのレシピですが, 明らかに1日1回実行すればいいシロモノ.
タップして実行させるなんてありえません.
というわけでこのレシピはオートメーションで指定時間に実行させましょう.
画像の通り日付が変わった0:01などにすれば十分です.
これでカレンダーアプリや日付ウィジェットと同様に, 何もしなくともホーム画面で日付をチェックできます.
しかも配置する場所もフォントも大きさも(予め用意しなければいけませんが)自由です.
カスタムしたホーム画面に合わせて選ぶことができます.
BASE64エンコードしたものを使う
上記では予め「ファイル」アプリに壁紙や透過画像を用意しました.
これをBASE64エンコードした文字列で置き換えることも可能です.
基本形は同じなので一部だけ見てみます.
前回は各々の場所で「ファイルを取得」を使っていましたが今回は各種画像を予め「BASE64エンコード」でエンコードした文字列を「辞書」アクションに追加しておきます.
X座標Y座標の初期位置は今回も必要です.
エンコードした画像を元に戻るには, 「辞書」アクションの対応する値をデコードするだけです.
最初に書いたようにマジック変数を使って「辞書の値を取得」を使わず扱うことが可能です.
しかしこれも最初に書いた通り, マジック変数で直接キーを指定するときにマジック変数は使えません.
なので「各項目を繰り返す」内で「繰返し項目」を使いたい場合は「辞書の値を取得」を使わざるを得ません.
また場合によっては画像の大きさを変える必要が出てくるかもしれません.
その場合は重ねる前に「イメージのサイズを変更」でリサイズした上で行います.
これで, エンコードした画像を使って同じことをすることができます.
〆
レシピからも分かる通り, この方法は壁紙を直接編集しているわけではないためオリジナルの画像に影響を与えません.
透過画像(透過でなくともいいですが)とオートメーションを使って, 好きな情報をホーム画面に表示させると面白いですね.