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してあげます。