iOS, Swiftでのアニメーションについて(2)
今回は、以下のUIViewのクラスメソッドを試してみました。 iOS4の頃からあるものの、僕は使ったことがありませんでした。
class func transitionWithView(_ view: UIView,
duration duration: NSTimeInterval,
options options: UIViewAnimationOptions,
animations animations: (() -> Void)?,
completion completion: ((Bool) -> Void)?)
公式ドキュメントに、
Creates a transition animation for the specified container view.
とあるように、「指定のコンテナビュー(UIView)の遷移・変化アニメーションを作る」とある。
optionsに指定できるアニメーションはなかなか豊富で以下の種類がある。
public static var TransitionNone: UIViewAnimationOptions { get } // default
public static var TransitionFlipFromLeft: UIViewAnimationOptions { get } // 左回転
public static var TransitionFlipFromRight: UIViewAnimationOptions { get } //右回転
public static var TransitionCurlUp: UIViewAnimationOptions { get } //上にめくる
public static var TransitionCurlDown: UIViewAnimationOptions { get } // 下にめくる
public static var TransitionCrossDissolve: UIViewAnimationOptions { get } // クロスフェード
public static var TransitionFlipFromTop: UIViewAnimationOptions { get } // 上回転
public static var TransitionFlipFromBottom: UIViewAnimationOptions { get } // 下回転
最初は、animationsのブロックの中になにを書いたらいいのか分からなかったが、 アニメーションの過程で行われる、 ビューの追加、削除などを書く。 公式のドキュメントのサンプルにも下のように書かれている。
// toViewは、アニメーションの過程でContainerViewに追加されるUIVIew
// fromViewは、アニメーションの過程でContainerViewから削除されるUIView
[UIView transitionWithView:containerView
duration:0.2
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{ [fromView removeFromSuperview]; [containerView addSubview:toView]; }
completion:NULL];
これを応用すると、以下の具合にUINavigationControllerの遷移アニメーションも変更することができる。 参考: [iOS] ナビゲーションコントローラのトランジションを手軽に差し替える方法 | Developers.IO
class MyNavigationController: UINavigationController {
override func pushViewController(viewController: UIViewController, animated: Bool) {
if animated {
UIView.transitionWithView(self.view, duration: 0.4, options: .TransitionCurlDown, animations: {
// viewの追加処理
super.pushViewController(viewController, animated: false)
}, completion: nil)
}
else {
super.pushViewController(viewController, animated: false)
}
}
}
このように書くとUINavigationControllerでpushViewController関数を使った時に、 指定のUIViewAnimationOptionsでアニメーションさせることができる。