その1:UIViewのアニメーション機能を使う
現在の状態からbeginAnimations()〜commitAnimations()の間に書かれた状態に変化させてくれるという、iOSではおなじみの方法。最初にimageViewであるimage1のαチャネルの値(要するに透明度)を0(透明)にしておいて、setAnimationDurationで指定した時間(秒)をかけて、αチャネルの値を1(不透明)にする。
"fadeIn"はanimationIDということで、別の処理との識別に使うので、識別できればなんでもいいようだ。(この例では識別に使ってない)
setAnimationCurve()にアニメーションの進行速度の変化の指定もできる。ここでの.EaseOutはフェードインが速く始まりゆっくり終わる指定。
image1.alpha = 0
//フェードイン
//アニメーションのタイプを指定
UIView.beginAnimations("fadeIn", context: nil)
//イージング指定
UIView.setAnimationCurve(UIViewAnimationCurve.EaseOut)
//アニメーション秒数を指定
UIView.setAnimationDuration(2.0)
//目標のアルファ値を指定
image1.alpha = 1
//アニメーション実行
UIView.commitAnimations()
他にもsetAnimationDidStopSelector〜メソッドでアニメ実行終了後に呼ぶメソッドをSelectorとして指定できたりするようだ。
いろいろあるようなので、調べて使うよろし。
その2:QuartzCoreを使う
ついでに逆にフェードアウトも指定してみる。
その1のやり方でやってもいいんだけど、フェードアウトした直後にimage1をremoveFromSuperview()したところ、フェードアウトせずにさっさとimage1がremoveされてしまったので、別の方法を探したところでてきたのがこれ。
QuartzCoreFrameworkのインポートとかはプロジェクトの設定で必要なのかな。Objective-Cみたいにクラスごとにimportはいらないようだ。
beginAnimationsと違い、どこまでの範囲をアニメーションするとかはないようなので、必要であれば別メソッドに分けて実行させたほうがいいかも。さすがにメソッドの終わりで一区切りつくと思うので。
image1.alpha = 1
//フェードアウト
let transition = CATransition()
transition.duration = 2.0
transition.type = kCATransitionFade
view.layer.addAnimation(transition, forKey: nil)
image1.alpha = 0
view.layer.removeAllAnimations()
としてアニメ設定を削除しておかないと、次回使う時に不具合を起こすことになるので注意だ。その他のトランジションもパラメータを変えたりしてできるだろう。
0 件のコメント:
コメントを投稿