开源框架VTMagic的使用介绍
VTMagic
有很多开发者曾尝试模仿写出类似网易、腾讯等应用的菜单分页组件,但遍观其设计,大多都比较粗糙,不利于后续维护和扩展。琢磨良久,最终决定开源这个耗时近两年打磨而成的框架,以便大家可以快速实现类似需求,而不用把大量的精力浪费在重复造轮子的过程中,VTMagic目前在多个项目中稳定运行一年多。
特性概要
每个页面都是一个完整的控制器,友好支持个性化自定义;
页面切换时能准确触发相应的生命周期方法(viewWillAppear:等),便于管理各自页面的数据加载和其它逻辑处理;
导航栏支持多种布局样式,包括自适应文本宽度、自动平分、居中布局以及自定义宽度等;
可以在任意子控制器中,通过self.magicController获取最近的上层主控制器,方便跨层级处理逻辑;
支持内嵌webview,若滑动手势无法响应,可以通过handlePanGesture:解决;
支持页面重用和横竖屏切换;
更多特性请参见VTMagicView.h文件。

预览图
使用
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 >,主要有以下三个方法:

集成效果

下划线样式

气泡样式

其它
重要协议
除了数据源协议< 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]; |
源码地址:http://download.csdn.net/detail/hbblzjy/9563701
开源框架VTMagic的使用介绍的更多相关文章
- ubuntu之路——day19.2 开源框架与迁移、CNN中的数据扩充
开源框架与迁移 上面介绍了一些已经取得很好成绩的CNN框架,我们可以直接从GitHub上下载这些神经网络的结构和已经在ImageNet等数据集上训练好的权重超参数. 在应用于我们自己的数据时. 1.如 ...
- 介绍一个非常好用的跨平台C++开源框架:openFrameworks
介绍一个非常好用的跨平台C++开源框架:openFrameworks 简介 首先需要说明的一点是: openFrameworks 设计的初衷不是为计算机专业人士准备的, 而是为艺术专业人士准备的, 就 ...
- IOS-常用第三方开源框架介绍
iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 时间:2015-05-06 16:43:34 阅读:533 评论:0 收藏:0 [点我收藏+] ...
- iOS开发-常用第三方开源框架介绍
iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...
- ERP开源框架 + 二次开发平台 介绍
经历了多年软件开发,深受网络大侠们的资源共享才得以有所成绩, 本人主要是做企业ERP软件,一直有个感受,开发具体某个功能不难,但随着需求的增加,管理庞大的代码却成了最大的问题 而为企业管理所做的开发, ...
- Android 开源框架Universal-Image-Loader学习
Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二)--- 图片 ...
- 值得推荐的android开源框架
1.volley 项目地址https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载: (2) 网络请求的排序(scheduling) ...
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
随机推荐
- linux内存管理初始化
内存管理子系统是linux内核最核心最重要的一部分,内核的其他部分都需要在内存管理子系统的基础上运行.而对其初始化是了解整个内存管理子系统的基础.对相关数据结构的初始化是从全局启动例程start_ke ...
- Spark:Spark 编程模型及快速入门
http://blog.csdn.net/pipisorry/article/details/52366356 Spark编程模型 SparkContext类和SparkConf类 代码中初始化 我们 ...
- python模块collections中namedtuple()的理解
Python中存储系列数据,比较常见的数据类型有list,除此之外,还有tuple数据类型.相比与list,tuple中的元素不可修改,在映射中可以当键使用.tuple元组的item只能通过index ...
- Android艺术开发探索第三章——View的事件体系(上)
Android艺术开发探索第三章----View的事件体系(上) 我们继续来看这本书,因为有点长,所以又分了上下,你在本片中将学习到 View基础知识 什么是View View的位置参数 Motion ...
- Windows 为右键菜单瘦身
当你想删除右键菜单中某些选项时,一种比较合适的思路是: 1.如果软件本身提供了控制选项,那么直接在该软件设置即可.没必要在注册表操作.比如360安全卫士和360杀毒都提供了这种机制. 值得一提的是,3 ...
- 源码推荐:移动端商城(微信小程序源代码) WebView离线缓存
移动端商城(微信小程序源代码)(上传者:腾讯攻城师jack) 功能包括:商品橱窗,商品搜索,购物车,结账等功能. TableView嵌套webView自适应高度(上传者:linlinchen) tab ...
- Java并发框架——AQS阻塞队列管理(一)——自旋锁
我们知道一个线程在尝试获取锁失败后将被阻塞并加入等待队列中,它是一个怎样的队列?又是如何管理此队列?这节聊聊CHL Node FIFO队列. 在谈到CHL Node FIFO队列之前,我们先分析这种队 ...
- windows与linux的文件夹共享
公司配备了一台性能还算不错的电脑,不过是台式机.我在上面装了ubuntu,但是我的代码工作目录全部都在我自己的win7笔记本上.有时程序开多了就容易卡,于是想到用装ubuntu的台式机来访问我win7 ...
- 学习Tensorflow,使用源码安装
PC上装好Ubuntu系统,我们一步一步来讲解如何使用源码安装tensorflow?(我的Ubuntu系统是15.10) 安装cuda 根据你的系统型号选择相应的cuda版本下载 https://de ...
- Java-IO之PrintWriter(字符打印输出流)
PrintWriter是字符类型的打印输出流,继承于Writer,用于向文本输出流打印对象的格式化表示形式. PrintWriter的主要函数: PrintWriter(OutputStream ou ...