すべてのアイコンに・・・
アイコン1つ1つにエフェクトを掛けることができるところまで紹介しましたので、ここでは、ページ上にあるアイコン全てにエフェクトを掛けていこうと思います。
10コのアイコンで試す
1つのアイコンでできるなら、10コのアイコンでもできますよね。
以下は、10コのアイコンにエフェクトを掛けたサンプルです。
page[1]:translate(-offset)
page[2]:translate(-offset)
page[3]:translate(-offset)
page[4]:translate(-offset)
page[5]:translate(-offset)
page[6]:translate(-offset)
page[7]:translate(-offset)
page[8]:translate(-offset)
page[9]:translate(-offset)
page[10]:translate(-offset)
end
effect10_1
左上のアイコンから10コだけが倍速移動します。
アイコン10コ倍速移動エフェクト
イメージ通りの移動をしてくれました。
for文を使って書き直す
ページ上のアイコンすべてを特定するには、プログラミングによって汎用性を高めなければなりません。
ここでは、for文を導入して、先ほどの「アイコン10コ倍速移動エフェクト」を書き直してみます。
以下は、for文で書き直したエフェクトのサンプルです。
for i=1, 10, 1 do
page[i]:translate(-offset)
end
end
effect10_2
変数iを1から10まで1ずつ増やしながら処理をするという内容です。
for文で書き直したエフェクト
書き直すだけにしようと思いましたが、逆向き移動にしてしまいました。
for文ですべてのアイコンを特定する
プログラミングによって汎用性を高めるということで、その適用範囲をすべてのアイコンに広げます。
とは言うものの、アイコン数はデバイスや環境によって違います。
ちなみに、ここで言うアイコン数とは、ページ上に見えるアプリアイコンの数ではなく、1ページに表示可能なアイコン数のことです。
なので、iPhone4Sであれば、アイコン数は16ですし、iPhone6Plusでしたら、アイコン数は24ということです。
しかも、脱獄すると表示できるアイコンの列数や行数を変更できますので、アイコン数は人によってバラバラと思わなければなりません。
そこで登場するのがpageです。
何度も出てきたpageですが、pageには幅や高さの情報だけでなく、アイコン数も情報として取得することができるのです。
取得方法は、以下の通りです。
page.max_icons
これにより、個々に違うアイコン数を取得できますので、汎用的にプログラミングできるのです。
以下は、page.max_iconsを使って、アイコン全てを特定したエフェクトのサンプルです。
local percent = offset/page.width
local angle = percent*math.pi*2
for i=1, page.max_icons, 1 do
page[i]:rotate(angle)
end
end
effect10_3
変数iを1から最大アイコン数まで1ずつ増やしながら処理をするという内容です。
今回は、アイコン全てを回転させました。
アイコン全てを特定したエフェクト
あれれ・・・
回転しませんね・・・
設定アプリのCylinderを確認してみました。
やはり、×印が付いていました。
エラーログも確認してみます。
未定義のアイコンがあるようです。
よくよく考えたら、アイコン最大数の参照をしているにも関わらず、私のiPhone6Plusでは、どのページもアイコン数が最大値に達していません。
サンプルで使っているページを見ていただければお分かり頂けると思いますが、右下までアイコンが埋まっていないのに、右下までアイコン情報を取得しようとしているのですから、Cylinderも困ってしまったのでしょうね。
では、アイコン情報が未定義かどうかで判断し、アイコン情報があればエフェクトを掛けるというプログラムを書いてみましょう。
local percent = offset/page.width
local angle = percent*math.pi*2
for i=1, page.max_icons, 1 do
if( page[i] == nil ) then break end
page[i]:rotate(angle)
end
end
effect10_3_2
if文で、未定義のアイコンならforによる探索を終わるという内容です。
アイコン全てを特定したエフェクト
回転しましたね。
アイコン全てを特定するためのテンプレートの完成!!って感じです。
for文をスタイリッシュにする
未定義のアイコンを判断条件にすることで、ページ上にあるすべてのアイコンにエフェクトを掛けることができました。
ここれ終わっても良かったのですが、自称「プログラマー」ですので、もう少しスタイリッシュに記述してみます。
紹介したfor文は数値用でしたので、汎用for文というものを紹介します。
page.max_iconsを使わずとも、すべてのアイコンを探索し、未定義かどうかの判断もしてくれるという、至れり尽くせりの記述方法です。
よくリスト処理に使われるのですが、その記述方法で書き直すと、以下のようになります。
local percent = offset/page.width
local angle = percent*math.pi*2
for i, icon in subviews(page) do
icon:rotate(-angle)
end
end
effect10_4
iは添え字で、1からの通し番号となります。
pege内のアイコン情報が、順番にiconに格納されます。
その際、未定義かどうかの判断もしてくれるので、とても重宝できる記述方法です。
今回は、アイコン全てを逆回転させました。
アイコン全てを特定した逆回転エフェクト
スタイリッシュという言葉が適切かどうかわかりませんが、シンプルで汎用性もあるかと思います。
今後は、この記述をベースに進めていきます。
当サイトの更新状況を、アラートで表示するかどうかの設定をします。
保存する