LoginSignup
3

More than 5 years have passed since last update.

化粧品アプリLIPSでも使われてるPageMenuを導入方法[Swift3][Swift4でも]

Last updated at Posted at 2018-05-19

IMG_7510.PNG

LIPSでも使われているPageMenu

PageMenuをCocoapodsでインストールするとエラーを吐く

Swift3以前のものがCocoapodsでは使用されています。そのためGithubからコピペする必要があります。PageMenuのGithubファイルはこちら

Swift Versionを3.3に落とす

Swift4には未だ対応してないため4のまま修正するより3.3にバージョンを落とす方が楽です。

PageMenuViewController.swift
class PageMenuViewController: UIViewController {

    var pageMenu: CAPSPageMenu?


    override func viewDidLoad() {
        super.viewDidLoad()

        //ストーリーボードのFavListTableViewControllerを取得する必要がある
        let vc1 = storyboard?.instantiateViewController(withIdentifier: "FavListTableViewController") as! FavListTableViewController
        let vc2 = storyboard?.instantiateViewController(withIdentifier: "FavListTableViewController") as! FavListTableViewController
        let vc3 = storyboard?.instantiateViewController(withIdentifier: "FavListTableViewController") as! FavListTableViewController
        let vc4 = storyboard?.instantiateViewController(withIdentifier: "FavListTableViewController") as! FavListTableViewController
        let vc5 = storyboard?.instantiateViewController(withIdentifier: "FavListTableViewController") as! FavListTableViewController

        //TableViewはViewControllerのViewのサブクラスなのでViewが生成されてからじゃないと作れない
        _ = vc1.view
        _ = vc2.view
        _ = vc3.view
        _ = vc4.view
        _ = vc5.view


        vc1.title = "リスト1"
        vc2.title = "リスト2"
        vc3.title = "リスト3"
        vc4.title = "リスト4"
        vc5.title = "リスト5"

        vc1.listNum = 1
        vc2.listNum = 2
        vc3.listNum = 3
        vc4.listNum = 4
        vc5.listNum = 5

        let parameters: [CAPSPageMenuOption] = [
            .menuItemSeparatorWidth(4.0),
            .useMenuLikeSegmentedControl(true),
            .menuItemSeparatorPercentageHeight(0.0)
        ]
        pageMenu = CAPSPageMenu(viewControllers: [vc1, vc2, vc3, vc4, vc5], frame: view.bounds, pageMenuOptions: parameters)
        view.addSubview(pageMenu!.view)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

//     PageMenuがNavigationBarと被らないように
    override func viewDidLayoutSubviews() {
        let naviHeight = UIApplication.shared.statusBarFrame.size.height + self.navigationController!.navigationBar.frame.height
        pageMenu!.view.frame = CGRect(x: 0.0, y: naviHeight, width: self.view.frame.width, height: self.view.frame.height - naviHeight)
        print(#function)

//        let tabHeight = self.tabBarController?.tabBar.frame.size.height

    }
}

僕の場合、ストーリーボードにUIViewControllerであるFavListTableViewControllerを配置し、それをStoryboard IDで取得しています。ViewControllerの規則としてUIViewControllerに置かれるUIKit部品は、UIViewが呼ばれてからでないと呼ばれません。僕のケースですとUITableViewを置いていました。

PageMenuのGithubドキュメントにあるようにタイトルやparametersを指定し、addSubViewしてあげます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3