Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/tianzhuo112/VTMagic

VTMagic is a page container library for iOS.
https://github.com/tianzhuo112/VTMagic

Last synced: about 2 months ago
JSON representation

VTMagic is a page container library for iOS.

Lists

README

        

# VTMagic

VTMagic is a page container library for iOS, you can custom every page controller by different identifier if you need. It's so easy to use!([中文手册传送门](http://www.jianshu.com/p/cb2edb21055f))

[CHANGELOG][CHANGELOG_EN]\([变更日志][CHANGELOG_CN])

![preview image](Gif/magic.gif)

## Communication
- If you **found a bug**, *and can provide steps to reliably reproduce it*, open an issue.
- If you **have a feature request**, open an issue.
- If you **want to contribute**, submit a pull request.

## Installation

### CocoaPods

VTMagic is available through [CocoaPods](http://cocoapods.org). To install
it, simply add the following line to your Podfile, and then import :

```ruby
pod "VTMagic"
```

### Manually

1. Download the project and drop `VTMagic` folder into your project.
2. Import file `VTMagic.h`.

```objective-c
#import "VTMagic.h"
```

## Requirements

This library requires iOS 6.0+ and Xcode 7.0+.

## Usage

To run the example project, clone the repo, and run `pod install` from the project directory first.

### Integration

```objective-c
- (void)viewDidLoad {
[super viewDidLoad];

[self addChildViewController:self.magicController];
[self.view addSubview:_magicController.view];

[_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;
}
```
or like this
```objective-c
#import "VTMagicController.h"

@interface ViewController : VTMagicController

@end
```

```objective-c
@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];
}
```

### Protocols

You must conform to ``. `` and `` are optional.

#### VTMagicViewDataSource

```objective-c
- (NSArray *)menuTitlesForMagicView:(VTMagicView *)magicView {
return _menuList;
}

- (UIButton *)magicView:(VTMagicView *)magicView menuItemAtIndex:(NSUInteger)itemIndex {
static NSString *itemIdentifier = @"itemIdentifier";
UIButton *menuItem = [magicView dequeueReusableItemWithIdentifier:itemIdentifier];
if (!menuItem) {
menuItem = [UIButton buttonWithType:UIButtonTypeCustom];
[menuItem setTitleColor:RGBCOLOR(50, 50, 50) forState:UIControlStateNormal];
[menuItem setTitleColor:RGBCOLOR(169, 37, 37) forState:UIControlStateSelected];
menuItem.titleLabel.font = [UIFont fontWithName:@"Helvetica" size:16.f];
}
return menuItem;
}

- (UIViewController *)magicView:(VTMagicView *)magicView viewControllerAtPage:(NSUInteger)pageIndex {
if (0 == pageIndex) {
static NSString *recomId = @"recom.identifier";
VTRecomViewController *recomViewController = [magicView dequeueReusablePageWithIdentifier:recomId];
if (!recomViewController) {
recomViewController = [[VTRecomViewController alloc] init];
}
return recomViewController;
}

static NSString *gridId = @"grid.identifier";
VTGridViewController *gridViewController = [magicView dequeueReusablePageWithIdentifier:gridId];
if (!gridViewController) {
gridViewController = [[VTGridViewController alloc] init];
}
return gridViewController;
}
```

#### VTMagicViewDelegate

```objective-c
- (void)magicView:(VTMagicView *)magicView viewDidAppear:(UIViewController *)viewController atPage:(NSUInteger)pageIndex {
NSLog(@"pageIndex:%ld viewDidAppear:%@", (long)pageIndex, viewController.view);
}

- (void)magicView:(VTMagicView *)magicView viewDidDisappear:(UIViewController *)viewController atPage:(NSUInteger)pageIndex {
NSLog(@"pageIndex:%ld viewDidDisappear:%@", (long)pageIndex, viewController.view);
}

- (void)magicView:(VTMagicView *)magicView didSelectItemAtIndex:(NSUInteger)itemIndex {
NSLog(@"didSelectItemAtIndex:%ld", (long)itemIndex);
}
```

#### VTMagicReuseProtocol

This method will be called when page is reused, you should clear old data or reset content offset in here.

```objective-c
- (void)vtm_prepareForReuse {
NSLog(@"clear old data if needed:%@", self);
}
```

## Features

#### Appearance callbacks

VTMagic will automatically calls the appearance callbacks when user switches the page, maybe you should do something in here, e.g. refresh page info.

```objective-c
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];

// do something...
}

- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];

// do something...
}

```

#### Get magicController

You can get the nearest magicController in any child view controller which is conforms to ``, after you import file `VTMagic.h`.

```objective-c
NSInteger currentPage = self.magicController.currentPage;
UIViewController *viewController = self.magicController.currentViewController;
```

#### Switch to specified page

You can switch to some specified page.

```objective-c
[self.magicView switchToPage:3 animated:YES];
[self.magicController switchToPage:3 animated:YES];
```
#### Get specified view controller

You can get any page controller by page index, it will return nil if the page is not on the screen.

```objective-c
UIViewController *viewController = [self.magicView viewControllerAtPage:3];
UIViewController *viewController = [self.magicController viewControllerAtPage:3];
```

## Author

**VictorTian** *email: [email protected]*

## License

VTMagic is released under the MIT license. See LICENSE for details.

[CHANGELOG_CN]: CHANGELOG_CN.md
[CHANGELOG_EN]: CHANGELOG_EN.md