すべてのアイコンに・・・

アイコン1つ1つにエフェクトを掛けることができるところまで紹介しましたので、ここでは、ページ上にあるアイコン全てにエフェクトを掛けていこうと思います。


10コのアイコンで試す

1つのアイコンでできるなら、10コのアイコンでもできますよね。

以下は、10コのアイコンにエフェクトを掛けたサンプルです。

return ( page, offset, screen_width, screen_height)
 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文で書き直したエフェクトのサンプルです。

return ( page, offset, screen_width, screen_height)
 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を使って、アイコン全てを特定したエフェクトのサンプルです。

return ( page, offset, screen_width, screen_height)
 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も困ってしまったのでしょうね。

では、アイコン情報が未定義かどうかで判断し、アイコン情報があればエフェクトを掛けるというプログラムを書いてみましょう。

return ( page, offset, screen_width, screen_height)
 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を使わずとも、すべてのアイコンを探索し、未定義かどうかの判断もしてくれるという、至れり尽くせりの記述方法です。
よくリスト処理に使われるのですが、その記述方法で書き直すと、以下のようになります。

return ( page, offset, screen_width, screen_height)
 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に格納されます。
その際、未定義かどうかの判断もしてくれるので、とても重宝できる記述方法です。

今回は、アイコン全てを逆回転させました。

アイコン全てを特定した逆回転エフェクト

スタイリッシュという言葉が適切かどうかわかりませんが、シンプルで汎用性もあるかと思います。

今後は、この記述をベースに進めていきます。



当サイトの更新状況を、アラートで表示するかどうかの設定をします。


保存する

その機能で月額1500円もするのですか??
その機能なら年額1500円で手に入りますよ!

当サイトもこちらのレンタルサーバーを利用しています。

Copyright (C) 2007 Bokechans.net All Rights Reserved.