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でアニメーションさせることができる。