「Ios/swift/外部ライブラリ/PagingMenuController」の版間の差分
提供: 初心者エンジニアの簡易メモ
(ページの作成:「==PagingMenuControllerとは== smartnewsのようなPageView付きタブを追加してくれるライブラリ 注意:素早く複数回PageView切り替えのスワ...」) |
|||
(同じ利用者による、間の10版が非表示) | |||
行2: | 行2: | ||
smartnewsのようなPageView付きタブを追加してくれるライブラリ | smartnewsのようなPageView付きタブを追加してくれるライブラリ | ||
− | 注意:素早く複数回PageView切り替えのスワイプをすると反応しない(一回目のアニメーションが終わるまで反応しない) | + | 注意:素早く複数回PageView切り替えのスワイプをすると反応しない(一回目のアニメーションが終わるまで反応しない)致命的な欠点がある。私の確認だと2番目のtabのViewControllerの幅が一部小さくなることもあった。 |
+ | |||
+ | github:https://github.com/kitasuke/PagingMenuController | ||
+ | |||
+ | ==インストール== | ||
+ | $ vi podfile | ||
+ | source 'https://github.com/CocoaPods/Specs.git' | ||
+ | platform :ios, '9.0' | ||
+ | target 'Sample1' do | ||
+ | use_frameworks! | ||
+ | pod 'PagingMenuController' | ||
+ | end | ||
+ | $ pod install | ||
+ | |||
+ | ==サンプル== | ||
+ | ViewControllerを複数読み込んでます。予めStroyboadのViewControllerのStoryboard_Idに"FirstViewControllerId"を設定してます。 | ||
+ | |||
+ | import UIKit | ||
+ | import PagingMenuController | ||
+ | class PagenewViewController: UIViewController { | ||
+ | private var genre_ids: [Int] = [0, 999, 1, 2, 4, 5, 6, 99] | ||
+ | private var genre_names: [String] = ["全体", "ランキング", "News", "芸能", "スポーツ", "アニメ", "ゲーム", "その他"] | ||
+ | override func viewDidAppear(animated: Bool) { | ||
+ | super.viewDidAppear(animated) | ||
+ | struct MenuItem: MenuItemViewCustomizable { | ||
+ | var displayMode: MenuItemDisplayMode { | ||
+ | let title = MenuItemText(text: name) | ||
+ | return .Text(title: title) | ||
+ | } | ||
+ | var name = ""; | ||
+ | } | ||
+ | struct MenuOptions: MenuViewCustomizable { | ||
+ | var itemsOptions: [MenuItemViewCustomizable] { | ||
+ | var menuItems: Array<MenuItemViewCustomizable> = [] | ||
+ | for genre_name in genre_names { | ||
+ | let item:MenuItemViewCustomizable = MenuItem(name: genre_name) | ||
+ | menuItems.append(item) | ||
+ | } | ||
+ | return menuItems | ||
+ | } | ||
+ | var menuDisplayMode: MenuDisplayMode { | ||
+ | return .SegmentedControl | ||
+ | // return .Standard(widthMode: .Flexible, centerItem: true, scrollingMode: .PagingEnabled) | ||
+ | } | ||
+ | var genre_names: [String] = [] | ||
+ | } | ||
+ | struct PagingMenuOptions: PagingMenuControllerCustomizable { | ||
+ | var componentType: ComponentType { | ||
+ | let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) | ||
+ | var viewControllers: Array<ViewController> = [] | ||
+ | var key = 0 | ||
+ | for genre_name: String in genre_names { | ||
+ | let viewController1 = storyboard.instantiateViewControllerWithIdentifier("FirstViewControllerId") as! ViewController | ||
+ | // viewController1.setGenreId(genre_ids[key]) | ||
+ | // viewController1.setGenreName(genre_name) | ||
+ | viewController1.title = genre_name | ||
+ | viewControllers.append(viewController1) | ||
+ | key += 1 | ||
+ | } | ||
+ | return .All(menuOptions: MenuOptions(genre_names:self.genre_names), pagingControllers: viewControllers) | ||
+ | } | ||
+ | var lazyLoadingPage: LazyLoadingPage { | ||
+ | return .Three | ||
+ | } | ||
+ | var genre_ids: [Int] = [] | ||
+ | var genre_names: [String] = [] | ||
+ | } | ||
+ | let options = PagingMenuOptions(genre_ids:self.genre_ids, genre_names:self.genre_names) | ||
+ | let pagingMenuController = PagingMenuController(options: options) | ||
+ | addChildViewController(pagingMenuController) | ||
+ | view.addSubview(pagingMenuController.view) | ||
+ | pagingMenuController.didMoveToParentViewController(self) | ||
+ | } | ||
+ | override func didReceiveMemoryWarning() { | ||
+ | super.didReceiveMemoryWarning() | ||
+ | } | ||
+ | } |
2016年7月28日 (木) 21:45時点における最新版
PagingMenuControllerとは
smartnewsのようなPageView付きタブを追加してくれるライブラリ
注意:素早く複数回PageView切り替えのスワイプをすると反応しない(一回目のアニメーションが終わるまで反応しない)致命的な欠点がある。私の確認だと2番目のtabのViewControllerの幅が一部小さくなることもあった。
github:https://github.com/kitasuke/PagingMenuController
インストール
$ vi podfile source 'https://github.com/CocoaPods/Specs.git' platform :ios, '9.0' target 'Sample1' do use_frameworks! pod 'PagingMenuController' end $ pod install
サンプル
ViewControllerを複数読み込んでます。予めStroyboadのViewControllerのStoryboard_Idに"FirstViewControllerId"を設定してます。
import UIKit import PagingMenuController class PagenewViewController: UIViewController { private var genre_ids: [Int] = [0, 999, 1, 2, 4, 5, 6, 99] private var genre_names: [String] = ["全体", "ランキング", "News", "芸能", "スポーツ", "アニメ", "ゲーム", "その他"] override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) struct MenuItem: MenuItemViewCustomizable { var displayMode: MenuItemDisplayMode { let title = MenuItemText(text: name) return .Text(title: title) } var name = ""; } struct MenuOptions: MenuViewCustomizable { var itemsOptions: [MenuItemViewCustomizable] { var menuItems: Array<MenuItemViewCustomizable> = [] for genre_name in genre_names { let item:MenuItemViewCustomizable = MenuItem(name: genre_name) menuItems.append(item) } return menuItems } var menuDisplayMode: MenuDisplayMode { return .SegmentedControl // return .Standard(widthMode: .Flexible, centerItem: true, scrollingMode: .PagingEnabled) } var genre_names: [String] = [] } struct PagingMenuOptions: PagingMenuControllerCustomizable { var componentType: ComponentType { let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) var viewControllers: Array<ViewController> = [] var key = 0 for genre_name: String in genre_names { let viewController1 = storyboard.instantiateViewControllerWithIdentifier("FirstViewControllerId") as! ViewController // viewController1.setGenreId(genre_ids[key]) // viewController1.setGenreName(genre_name) viewController1.title = genre_name viewControllers.append(viewController1) key += 1 } return .All(menuOptions: MenuOptions(genre_names:self.genre_names), pagingControllers: viewControllers) } var lazyLoadingPage: LazyLoadingPage { return .Three } var genre_ids: [Int] = [] var genre_names: [String] = [] } let options = PagingMenuOptions(genre_ids:self.genre_ids, genre_names:self.genre_names) let pagingMenuController = PagingMenuController(options: options) addChildViewController(pagingMenuController) view.addSubview(pagingMenuController.view) pagingMenuController.didMoveToParentViewController(self) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }