登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

VTMagic

[复制链接]
来自: phoiu 分类: iOS精品源码 上传时间: 2016-6-7 16:27:06

项目介绍:

VTMagic有很多开发者曾尝试模仿写出类似网易、腾讯等应用的菜单分页组件,但遍观其设计,大多都比较粗糙,不利于后续维护和扩展。琢磨良久,最终决定开源这个耗时近两年打磨而成的框架,以便大家可以快速实现类似需求,而不用把大量的精力浪费在重复造轮子的过程中,VTMagic目前在多个项目中稳定运行一年多。

特性概要
  • 每个页面都是一个完整的控制器,友好支持个性化自定义;
  • 页面切换时能准确触发相应的生命周期方法(viewWillAppear:等),便于管理各自页面的数据加载和其它逻辑处理;
  • 导航栏支持多种布局样式,包括自适应文本宽度、自动平分、居中布局以及自定义宽度等;
  • 可以在任意子控制器中,通过self.magicController获取最近的上层主控制器,方便跨层级处理逻辑;
  • 支持内嵌webview,若滑动手势无法响应,可以通过handlePanGesture:解决;
  • 支持页面重用和横竖屏切换;
  • 更多特性请参见VTMagicView.h文件。



使用VTMagic支持CocoaPods,只需在Podfile文件中添加如下代码即可:
pod "VTMagic"集成关于VTMagic的集成方法主要有以下两种:


1. 直接实例化VTMagicController对象,然后添加到当前控制器中。
[Objective-C] 查看源文件 复制代码
- (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中完成相应配置。
[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];
}





VTMagicViewDataSource协议不管是通过以上哪种方法集成的,都需要实现数据源协议< VTMagicViewDataSource >,主要有以下三个方法:
[Objective-C] 查看源文件 复制代码
- (NSArray<NSString *> *)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;
}





集成效果


其它

重要协议除了数据源协议< VTMagicViewDataSource >外 ,VTMagic中的重要协议还有< VTMagicViewDelegate >和< VTMagicReuseProtocol >。前者用于在主控制器中处理页面切换事件;后者用于子控制器被重用时,清除旧数据等逻辑处理。
VTMagicViewDelegate协议

[Objective-C] 查看源文件 复制代码
- (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
[Objective-C] 查看源文件 复制代码
- (void)vtm_prepareForReuse
{
    NSLog(@"clear old data if needed:%@", self);
}




其它
  • 你可以在任意子控制器中,通过self.magicController获取最近的上层主控制器,magicController遵循协议< VTMagicProtocol >,以便完成一些必要的跨层级的逻辑处理,前提是你需要import <VTMagic/VTMagic.h>文件。
    [Objective-C] 查看源文件 复制代码
    NSInteger currentPage = self.magicController.currentPage;
    UIViewController *viewController = self.magicController.currentViewController;
  • 切换到指定页面,页面切换有两种方式:


[self.magicView switchToPage:3 animated:YES];
或者
[self.magicController switchToPage:3 animated:YES];


  • 获取指定页面控制器,同样有两种方式:

UIViewController *viewController = [self.magicView viewControllerAtPage:3];
或者
UIViewController *viewController = [self.magicController viewControllerAtPage:3];

DEMO 直接下载: github : https://github.com/tianzhuo112/VTMagic



相关源码推荐:

我来说两句
*滑动验证:
所有评论(150)
ζั͡小龙ゞ 2016-6-7 18:37:36
感谢分享,Code4App有你更精彩
回复
xgy258 2016-6-7 22:50:09
我只是路过打酱油的。
回复
jiushenghuo 2016-6-8 09:07:11
很给力,Code4App有你更精彩!
回复
jiushenghuo 2016-6-8 09:22:59
感谢分享,Code4App有你更精彩
回复
liujinfeng 2016-6-8 11:27:17
学习学习!
回复
一枕黄粱 2016-6-8 13:43:50
正需要啊,感谢楼主无私分享!
回复
一枕黄粱 2016-6-8 13:52:56
精华内容,楼主V5!
回复
dhl110925 2016-6-8 13:59:49
赶快送钱哦。。。
回复
Eason__chan 2016-6-8 14:59:50
很给力,Code4App有你更精彩!
回复
提取码:  下载次数:193 状态:已购或VIP 售价:0(原价:10)金钱 下载权限:初级码农 
4396 1 193
联系我们
首页/微信公众账号投稿

帖子代码编辑/版权问题

QQ:435399051,742864542

如何获得代码达人称号?

代码贡献英雄榜
用户名 下载数
通过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表