特性概要git
-
每一個頁面都是一個完整的控制器,友好支持個性化自定義;github
-
頁面切換時能準確觸發相應的生命週期方法(viewWillAppear:等),便於管理各自頁面的數據加載和其它邏輯處理;web
-
導航欄支持多種佈局樣式,包括自適應文本寬度、自動平分、居中佈局以及自定義寬度等;app
-
能夠在任意子控制器中,經過self.magicController獲取最近的上層主控制器,方便跨層級處理邏輯;ide
-
支持內嵌webview,若滑動手勢沒法響應,能夠經過handlePanGesture:解決;佈局
-
支持頁面重用和橫豎屏切換;spa
更多特性請參見VTMagicView.h文件。.net

預覽圖code
使用對象
VTMagic支持CocoaPods,只需在Podfile文件中添加以下代碼便可:
集成
關於VTMagic的集成方法主要有如下兩種:
1. 直接實例化VTMagicController對象,而後添加到當前控制器中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
- (void)viewDidLoad { [ super viewDidLoad]; [self addChildViewController:self.magicController]; [self.view addSubview:_magicController.view]; [_magicController didMoveToParentViewController:self]; [_magicController.magicView reloadData]; } - (VTMagicController *)magicController { if (!_magicController) { _magicController = [[VTMagicController alloc] init]; _magicController.magicView.navigationColor = [UIColor whiteColor]; _magicController.magicView.sliderColor = [UIColor redColor]; _magicController.magicView.layoutStyle = VTLayoutStyleDivide; _magicController.magicView.switchStyle = VTSwitchStyleDefault; _magicController.magicView.navigationHeight = 40.f; _magicController.magicView.dataSource = self; _magicController.magicView.delegate = self; } return _magicController; } |
2. 繼承VTMagicController,而後在viewDidLoad中完成相應配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#import "VTMagicController.h" @interface ViewController : VTMagicController @end @implementation ViewController - (void)viewDidLoad { [ super viewDidLoad]; self.magicView.navigationColor = [UIColor whiteColor]; self.magicView.sliderColor = [UIColor redColor]; self.magicView.layoutStyle = VTLayoutStyleDefault; self.magicView.switchStyle = VTSwitchStyleDefault; self.magicView.navigationHeight = 40.f; self.magicView.dataSource = self; self.magicView.delegate = self; [self.magicView reloadData]; } |
VTMagicViewDataSource協議
無論是經過以上哪一種方法集成的,都須要實現數據源協議< VTMagicViewDataSource >,主要有如下三個方法:

集成效果

下劃線樣式

氣泡樣式

其它
重要協議
除了數據源協議< VTMagicViewDataSource >外 ,VTMagic中的重要協議還有< VTMagicViewDelegate >和< VTMagicReuseProtocol >。前者用於在主控制器中處理頁面切換事件;後者用於子控制器被重用時,清除舊數據等邏輯處理。
VTMagicViewDelegate協議
1 2 3 4 5 6 7 8 9 10 11 12 |
- (void)magicView:(VTMagicView *)magicView viewDidAppeare:(UIViewController *)viewController atPage:(NSUInteger)pageIndex { NSLog(@ "pageIndex:%ld viewDidAppeare:%@" ,pageIndex, viewController.view); } - (void)magicView:(VTMagicView *)magicView viewDidDisappeare:(UIViewController *)viewController atPage:(NSUInteger)pageIndex { NSLog(@ "pageIndex:%ld viewDidDisappeare:%@" ,pageIndex, viewController.view); } - (void)magicView:(VTMagicView *)magicView didSelectItemAtIndex:(NSUInteger)itemIndex { NSLog(@ "didSelectItemAtIndex:%ld" , (long)itemIndex); } |
VTMagicReuseProtocol
1 2 3 4 |
- (void)vtm_prepareForReuse { NSLog(@ "clear old data if needed:%@" , self); } |
其它
1 2 |
NSInteger currentPage = self.magicController.currentPage; UIViewController *viewController = self.magicController.currentViewController; |
1 |
[self.magicView switchToPage:3 animated:YES]; |
或者
1 |
[self.magicController switchToPage:3 animated:YES]; |
1 |
UIViewController *viewController = [self.magicView viewControllerAtPage:3]; |
或者
1 |
UIViewController *viewController = [self.magicController viewControllerAtPage:3]; |
結束語
最後,按照慣例,若是你喜歡這個輪子,請留下一顆star,也歡迎你們擴散,這是對做者最大的鼓勵和支持,拜謝!!!
GitHub地址:https://github.com/tianzhuo112/VTMagic