俺俺Twitterクライアント実装日記【Part2】

実装内容

・メイン画面となるUITabBarControllerの実装

↑ピンク枠で囲まれた部分!

実装方法

構成としては、
UITabBarControllerが複数のUINavigationControllerを保持する形

class MainTabBarViewController: UITabBarController {

   override func viewDidLoad() {
       super.viewDidLoad()
       
       let homeViewController = UIStoryboard(name: "HomeViewController", bundle: nil).instantiateInitialViewController()!
       let searchViewController = UIStoryboard(name: "SearchViewController", bundle: nil).instantiateInitialViewController()!
       let notificationViewController = UIStoryboard(name: "NotificationViewController", bundle: nil).instantiateInitialViewController()!
       let directMessageViewController = UIStoryboard(name: "DirectMessageViewController", bundle: nil).instantiateInitialViewController()!
       
       viewControllers = [homeViewController, searchViewController, notificationViewController, directMessageViewController].map
           { UINavigationController(rootViewController: $0) }
   }
}

MainTabBarViewControllerではUINavigationControllerのrootViewControllerになるViewControllerを呼び出し、最後にviewControllersにセットしてます。

ここまでは特に問題なし!

次はタブバーにアイコンをセットします。
Twitterと全く同じアイコンは見つからなかったので、全てicooon-monoから拝借させて頂きました🙇‍♂️

最終的に出来たのがこちら↓


アイコンのサイズ調整はextensionで新しくメソッドを生やしました。

extension UIImage {
   
   func resize(to: CGSize) -> UIImage? {
       UIGraphicsBeginImageContextWithOptions(to, false, 0.0)
       draw(in: CGRect(origin: .zero, size: to))
       let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
       UIGraphicsEndImageContext()
       return resizedImage
   }
}

TabBarController側ではこんな感じで使ってます。

func resizeToItemSize(_ image: UIImage) -> UIImage? {
    return image.resize(to: CGSize(width: 22, height: 22))
}
let directMessageViewController = UIStoryboard(name: "DirectMessageViewController", bundle: nil).instantiateInitialViewController()!
directMessageViewController.tabBarItem.image = resizeToItemSize(#imageLiteral(resourceName: "mail_gray"))

このままだとアイコンが少し上にズレた状態になってしまうので、HTMLでいうpadding的なものを修正して位置を調整します。

directMessageViewController.tabBarItem.imageInsets = UIEdgeInsets(top: 8, left: 0, bottom: -8, right: 0)

下に8pxズラしました!
これbottomで8をしないとレイアウトが崩れるので注意です。

最後に選択された際のアイコンの色を調整。

private func setupTabBar() {
    UITabBar.appearance().tintColor = UIColor(rgb: (85, 172, 238))
}

選択されるとTwitterカラーに変わるようになりました!

感想

書いている最中に気づいた。。
本家だとアイコンを押した際に若干アニメーションが走っている笑

いまは別の画面作成中なので細かいアニメーションは落ち着いたらやろうかなと思います😝

いいなと思ったら応援しよう!