実現したいこと
外部ライブラリの"PageMenuKit"
https://github.com/magickworx/PageMenuKitSwift
を導入しようと試みています。
やってみたこと
1.上記のリンクから"PageMenuKit"をダウンロードし、
PageMenuKitSwift.xcodeprojをXcodeで開き、"PageMenuKitFatBinary"を指定し、Buildを実行。
2."PageMenuKit.framework"が生成されたので、これをFinder上で"PageMenuKit"を導入したいプロジェクトのフォルダの中の.xcodeprojがあるのと同じ階層に移動。
3."PageMenuKit"を導入したいプロジェクトの.xcodeprojをXcodeで開き、Embedded Binariesから"PageMenuKit.framework"を追加し、
上記リンクの"How to use PageMenuKit.framework"の部分に従って、"PageMenuKitDemo"内と同じように以下のコードを記述。
import
1import PageMenuKit 2 3class RootViewController: BaseViewController 4{ 5 var pageMenuController: PMKPageMenuController? = nil 6 7 override func setup() { 8 super.setup() 9 10 self.title = "PageMenuKit Frameworks" 11 } 12 13 override func didReceiveMemoryWarning() { 14 super.didReceiveMemoryWarning() 15 // Dispose of any resources that can be recreated. 16 } 17 18 override func loadView() { 19 super.loadView() 20 } 21 22 override func viewDidLoad() { 23 super.viewDidLoad() 24 25 var controllers: [UIViewController] = [] 26 let dateFormatter = DateFormatter() 27 for month in dateFormatter.monthSymbols { 28 let viewController: DataViewController = DataViewController() 29 viewController.title = month 30 controllers.append(viewController) 31 } 32 33 let statusBarHeight: CGFloat = UIApplication.shared.statusBarFrame.size.height 34 /* 35 * Available menuStyles: 36 * .plain, .tab, .smart, .hacka, .ellipse, .web, .suite, .netlab, .nhk 37 * See PMKPageMenuItem.swift in PageMenuKit folder. 38 * "menuColors: []" means that we will use the default colors. 39 * "startIndex" can be set 1...controllers.count. 40 */ 41 pageMenuController = PMKPageMenuController(controllers: controllers, menuStyle: .smart, menuColors: [], startIndex: 1, topBarHeight: statusBarHeight) 42 // pageMenuController = PMKPageMenuController(controllers: controllers, menuStyle: .plain, menuColors: [.purple], startIndex: 8, topBarHeight: statusBarHeight) 43 pageMenuController?.delegate = self 44 self.addChild(pageMenuController!) 45 self.view.addSubview(pageMenuController!.view) 46 pageMenuController?.didMove(toParent: self) 47 } 48 49 override func viewWillAppear(_ animated: Bool) { 50 super.viewWillAppear(animated) 51 52 self.navigationController?.navigationBar.isHidden = false 53 } 54} 55 56extension RootViewController: PMKPageMenuControllerDelegate 57{ 58 func pageMenuController(_ pageMenuController: PMKPageMenuController, willMoveTo viewController: UIViewController, at menuIndex: Int) { 59 } 60 61 func pageMenuController(_ pageMenuController: PMKPageMenuController, didMoveTo viewController: UIViewController, at menuIndex: Int) { 62 } 63 64 func pageMenuController(_ pageMenuController: PMKPageMenuController, didPrepare menuItems: [PMKPageMenuItem]) { 65 // XXX: For .hacka style 66 var i: Int = 1 67 for item: PMKPageMenuItem in menuItems { 68 item.badgeValue = String(format: "%zd", i) 69 i += 1 70 } 71 } 72 73 func pageMenuController(_ pageMenuController: PMKPageMenuController, didSelect menuItem: PMKPageMenuItem, at menuIndex: Int) { 74 menuItem.badgeValue = nil // XXX: For .hacka style 75 } 76} 77 78コード
import
1 2class BaseViewController: UIViewController 3{ 4 required init(coder aDecoder: NSCoder) { 5 fatalError("NSCoding not supported") 6 } 7 8 init() { 9 super.init(nibName: nil, bundle: nil) 10 setup() 11 } 12 13 override func loadView() { 14 super.loadView() 15 16 self.edgesForExtendedLayout = [] 17 self.extendedLayoutIncludesOpaqueBars = true 18 19 self.view.backgroundColor = .white 20 self.view.autoresizesSubviews = true 21 self.view.autoresizingMask = [ .flexibleWidth, .flexibleHeight ] 22 } 23 24 func setup() { 25 // actual contents of init(). subclass can override this. 26 } 27 28 override func viewDidLoad() { 29 super.viewDidLoad() 30 // Do any additional setup after loading the view, typically from a nib. 31 } 32 33 override func didReceiveMemoryWarning() { 34 super.didReceiveMemoryWarning() 35 // Dispose of any resources that can be recreated. 36 } 37} 38 39コード
import
1 2class DataViewController: BaseViewController 3{ 4 public private(set) var textLabel: UILabel? = nil 5 6 override func setup() { 7 super.setup() 8 9 self.title = "Demo" 10 } 11 12 override func didReceiveMemoryWarning() { 13 super.didReceiveMemoryWarning() 14 // Dispose of any resources that can be recreated. 15 } 16 17 override func loadView() { 18 super.loadView() 19 20 let label = UILabel(frame: self.view.bounds) 21 label.backgroundColor = UIColor.hexColor(0xccccff) 22 label.font = UIFont.systemFont(ofSize: 64.0) 23 label.textAlignment = .center 24 label.adjustsFontSizeToFitWidth = true 25 self.view.addSubview(label) 26 self.textLabel = label 27 } 28 29 override func viewDidLoad() { 30 super.viewDidLoad() 31 } 32 33 override func viewWillAppear(_ animated: Bool) { 34 super.viewWillAppear(animated) 35 36 self.textLabel?.text = self.title 37 38 self.navigationController?.navigationBar.isHidden = true 39 } 40 41 override func viewWillDisappear(_ animated: Bool) { 42 super.viewWillDisappear(animated) 43 } 44} 45コード
import
1 2@UIApplicationMain 3class AppDelegate: UIResponder, UIApplicationDelegate 4{ 5 open private(set) var themeColor: UIColor? = nil 6 7 var window: UIWindow? 8 9 override init() { 10 super.init() 11 } 12 13 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 14 // Override point for customization after application launch. 15 // Create full-screen window 16 self.window = UIWindow(frame: UIScreen.main.bounds) 17 self.window!.backgroundColor = .white 18 19 // Make root view controller 20 self.window!.rootViewController = RootViewController() 21 22 // Show window 23 self.window!.makeKeyAndVisible() 24 25 return true 26 } 27 28 func applicationWillResignActive(_ application: UIApplication) { 29 /* 30 * Sent when the application is about to move from active to inactive state. 31 * This can occur for certain types of temporary interruptions (such as an 32 * incoming phone call or SMS message) or when the user quits 33 * the application and it begins the transition to the background state. 34 * Use this method to pause ongoing tasks, disable timers, and invalidate 35 * graphics rendering callbacks. Games should use this method to pause 36 * the game. 37 */ 38 } 39 40 func applicationDidEnterBackground(_ application: UIApplication) { 41 /* 42 * Use this method to release shared resources, save user data, 43 * invalidate timers, and store enough application state information 44 * to restore your application to its current state in case it is 45 * terminated later. 46 * If your application supports background execution, this method is called 47 * instead of applicationWillTerminate: when the user quits. 48 */ 49 } 50 51 func applicationWillEnterForeground(_ application: UIApplication) { 52 /* 53 * Called as part of the transition from the background to the active state; 54 * here you can undo many of the changes made on entering the background. 55 */ 56 } 57 58 func applicationDidBecomeActive(_ application: UIApplication) { 59 /* 60 * Restart any tasks that were paused (or not yet started) 61 * while the application was inactive. If the application was previously 62 * in the background, optionally refresh the user interface. 63 */ 64 } 65 66 func applicationWillTerminate(_ application: UIApplication) { 67 /* 68 * Called when the application is about to terminate. 69 * Save data if appropriate. See also applicationDidEnterBackground:. 70 */ 71 } 72} 73コード
発生している問題
上記の手順を踏んだ後に、ビルドすると、特にエラーが出ることもなく、
Build Succededと表示されてシュミレーターも起動しますが、真っ白な画面が表示されるだけでうまく導入できていないようです。
ちなみに"PageMenuKit"を導入したいプロジェクトのナビゲーターはこんな感じになっています。
どなたか解決策を教えていただけると幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。