Hatena::Groupiphone-dev

Ni chicha, ni limona - 平均から抜けられない僕

2009-05-14

[Mac][iPhone][Develop] CoreAnimationで、アニメーション無限ループさせる方法 14:27  [Mac][iPhone][Develop] CoreAnimationで、アニメーションを無限ループさせる方法 - Ni chicha, ni limona - 平均から抜けられない僕 を含むブックマーク はてなブックマーク -  [Mac][iPhone][Develop] CoreAnimationで、アニメーションを無限ループさせる方法 - Ni chicha, ni limona - 平均から抜けられない僕  [Mac][iPhone][Develop] CoreAnimationで、アニメーションを無限ループさせる方法 - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント

Core AnimationではCABasicAnimationクラスに色々とプロパティを設定することで、

などが設定できます。


たとえば最後のアニメーションの繰り返し回数を指定したい場合には、

    animationInstance.repeatCount = 10;

というように設定することで、設定したアプリを「10回繰り返す」というように宣言できます。便利ですね。


・・・さて、ここで困ったのが次の疑問:『アニメーションを永遠に繰り返すにはどうしたらいいのか』でした。Appleのドキュメントを見ても、それらしいプロパティはないし、試しに「-1」を設定してみても効果無し*1


便利なフレームワークなのにどうしたものかなぁ、とググっていたら、Appleがボクの質問にまさしく答えてくれるドキュメントを出していることに気づきました。Google検索結果の見出しでは以下の記述。

アニメーションは1秒の長さで、無限に反復します。アニメーションが1.5に到達すると、また0に戻り、繰り返されます。次のコードでこれを設定します。...

「これだ!やった、さすがアップル!」と期待して開いてみたら、そこにはこんなコードが。


pulseAnimation.duration = 1.0;
pulseAnimation.repeatCount = 1e100f; // ← ココに注目!
pulseAnimation.autoreverses = YES;

工工エエエ(´Д`;)エエエ工工

・・・あ、そうですか。これを「無限」て言いますか。


とまあともかく、これでアニメーションがいつまでも繰り返されている(ように見せる)処理が分かりました。めでたし、めでたし?


繰り返し回数についての追記

その後分かったことです。


repeatCountはfloatで定義されているので、“2.75”という指定をすると、「2回繰り返し、3回目の75%まで進んだところで止まる」という動作になることが分かりました。お、これは便利。


あとautoreversesがYESの場合、reverseぶんの動作も含めて「1回」とカウントされるのでご注意を。

*1:この場合は繰り返し無しと同じでした

takueitakuei2012/06/04 12:02pulseAnimation.repeatCount = 1e100f; // ← ココに注目!
ぷっ!!!マジか