開源框架VTMagic的使用介紹

特性概要git

  • 每一個頁面都是一個完整的控制器,友好支持個性化自定義;github

  • 頁面切換時能準確觸發相應的生命週期方法(viewWillAppear:等),便於管理各自頁面的數據加載和其它邏輯處理;web

  • 導航欄支持多種佈局樣式,包括自適應文本寬度、自動平分、居中佈局以及自定義寬度等;app

  • 能夠在任意子控制器中,經過self.magicController獲取最近的上層主控制器,方便跨層級處理邏輯;ide

  • 支持內嵌webview,若滑動手勢沒法響應,能夠經過handlePanGesture:解決;佈局

  • 支持頁面重用和橫豎屏切換;spa

更多特性請參見VTMagicView.h文件。.net

226936-8d283a54893a1d47.png

預覽圖code

使用對象

VTMagic支持CocoaPods,只需在Podfile文件中添加以下代碼便可:

1

pod "VTMagic"

集成

關於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 >,主要有如下三個方法:

1465730799513246.png

集成效果

226936-9ab56e7d06afcc98.gif

下劃線樣式

226936-dee334affbac63bd.gif

氣泡樣式

226936-efaefd0d0ce27d35.gif

 

 

其它

重要協議

除了數據源協議< 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);

}

其它

  • 你能夠在任意子控制器中,經過self.magicController獲取最近的上層主控制器,magicController遵循協議< VTMagicProtocol >,以便完成一些必要的跨層級的邏輯處理,前提是你須要import文件。

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

相關文章
相關標籤/搜索