VTMagic的使用
//
VTMagic的使用
// CFOrderViewController.m
// qifuyuniOS
////
/**
* @author 李洪强, 16-08-30 10:08:50
*
* 原生开发
*/
#import "CFOrderViewController.h"
#import "ZZChatViewController.h"
#import "CFCommodityController.h"
#import "WXApi.h"
#import "AppDelegate.h"
#import "VTMagic.h"
//待支付
#import "CFtobePaidTableCtrl.h"
//代发货
#import "CFtoBeShippedTableCtrl.h"
//待收货
#import "CFreceiptOfGoodsTabelCtrl.h"
//我的订单
#import "CFmyOrderTabelCtrl.h"
//
@interface CFOrderViewController ()<UIAlertViewDelegate,UIScrollViewDelegate,VTMagicViewDataSource,VTMagicViewDelegate>
@property(nonatomic,retain) VTMagicController *magicController;
//******************************************
/**
* @author 李洪强, 16-08-30 10:08:50
*
* 原生开发
*/
/** 横线View1 */
@property (weak, nonatomic) IBOutlet UIView *orangeView1;
/** 横线View2 */
@property (weak, nonatomic) IBOutlet UIView *orangeView2;
/** 横线View3 */
@property (weak, nonatomic) IBOutlet UIView *orangeView3;
/** 横线View4 */
@property (weak, nonatomic) IBOutlet UIView *orangeView4;
/** 存放顶部所有标题的View */
//@property (weak, nonatomic) IBOutlet UIView *titlesView;
/** 存放所有内容的scrollView */
@property (weak, nonatomic) IBOutlet UIScrollView *contentsScrollView;
/** 待支付*/
//To be paid
@property (weak, nonatomic) IBOutlet UIButton *tobePaidBtn;
/** 待发货*/
//toBeShipped
@property (weak, nonatomic) IBOutlet UIButton *toBeShippedBtn;
/** 待收货*/
//receiptOfGoods
@property (weak, nonatomic) IBOutlet UIButton *receiptOfGoodsBtn;
/**我的订单*/
//myOrder
@property (weak, nonatomic) IBOutlet UIButton *myOrderBtn;
/** 标签栏底部的红色指示器 */
@property (nonatomic, weak) UIView *indicatorView;
/** 当前选中的按钮 */
@property (nonatomic, weak) UIButton *selectedButton;
/** 顶部的按钮 */
@property (nonatomic, weak) UIButton *Button1;
/** 顶部的所有标签 */
@property (nonatomic, weak) UIView *titlesView;
/** 底部的所有内容 */
@property (nonatomic, weak) UIScrollView *contentView;
//cookie
@property(nonatomic,strong)NSDictionary *userInfo;
@property(nonatomic,copy)NSString * phoneNo;
@end
@implementation CFOrderViewController
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[_magicController.view setFrame:CGRectMake(0, 0, CFScreenW, self.view.height-50)];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationItem.title = @"我的订单";
// 设置导航栏
// [self setupNav];
// // 01 - 初始化子控制器
// [self setupChildVces];
//
// // 02 - 设置顶部的标签栏
// [self setupTitlesView];
//
// // 03 - 底部的scrollView
// [self setupContentView];
//
// //设置控制器为UIScrollView的代理
// self.contentView.delegate = self;
/*****fix****/
[self initView];
}
#pragma mark 初始化View
-(void)initView
{
[self addChildViewController:self.magicController];
[self.view addSubview:_magicController.view];
[_magicController.magicView reloadData];
}
- (NSArray<NSString *> *)menuTitlesForMagicView:(VTMagicView *)magicView {
return @[@"待支付",@"待发货",@"待收货",@"我的订单"];
}
- (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(0, 0, 0) forState:UIControlStateNormal];
[menuItem setTitleColor:[UIColor colorWithHex:@"FE6F07"] forState:UIControlStateSelected];
menuItem.titleLabel.font = [UIFont fontWithName:@"Helvetica" size:16.f];
}
return menuItem;
}
- (UIViewController *)magicView:(VTMagicView *)magicView viewControllerAtPage:(NSUInteger)pageIndex {
switch (pageIndex) {
case 0:
{
static NSString *bookmarkId = @"CFtobePaidTableCtrl.identifier";
CFtobePaidTableCtrl *cr = [magicView dequeueReusablePageWithIdentifier:bookmarkId];
if (!cr)
cr = [CFtobePaidTableCtrl new];
return cr;
}
break;
case 1:
{
static NSString *bookmarkId = @"CFtoBeShippedTableCtrl.identifier";
CFtoBeShippedTableCtrl *cr = [magicView dequeueReusablePageWithIdentifier:bookmarkId];
if (!cr)
cr = [CFtoBeShippedTableCtrl new];
return cr;
}
break;
case 2:
{
static NSString *bookmarkId = @"CFreceiptOfGoodsTabelCtrl.identifier";
CFreceiptOfGoodsTabelCtrl *cr = [magicView dequeueReusablePageWithIdentifier:bookmarkId];
if (!cr)
cr = [CFreceiptOfGoodsTabelCtrl new];
return cr;
}
break;
case 3:
{
static NSString *bookmarkId = @"CFmyOrderTabelCtrl.identifier";
CFmyOrderTabelCtrl *cr = [magicView dequeueReusablePageWithIdentifier:bookmarkId];
if (!cr)
cr = [CFmyOrderTabelCtrl new];
return cr;
}
break;
default:
break;
}
return nil;
}
- (VTMagicController *)magicController {
if (!_magicController) {
_magicController = [[VTMagicController alloc] init];
_magicController.magicView.navigationColor = [UIColor whiteColor];
_magicController.magicView.sliderColor = [UIColor colorWithHex:@"FE6F07"];
_magicController.magicView.layoutStyle = VTLayoutStyleDivide;
_magicController.magicView.switchStyle = VTSwitchStyleDefault;
_magicController.magicView.navigationHeight = 40.f;
_magicController.magicView.dataSource = self;
_magicController.magicView.delegate = self;
}
return _magicController;
}
/**01 添加子控制器*/
- (void)setupChildVces{
//待支付
CFtobePaidTableCtrl *toBePaidCtrl = [[CFtobePaidTableCtrl alloc]initWithNibName:@"CFtobePaidTableCtrl" bundle:nil];
[toBePaidCtrl.view setFrame:CGRectMake(0, 0, CFScreenW, CFScreenH)];
//toBePaidCtrl.view.backgroundColor = [UIColor colorWithRed:0.300 green:0.198 blue:1.000 alpha:1.000];
toBePaidCtrl.title = @"待支付";
[self addChildViewController:toBePaidCtrl];
//代发货
//#import "CFtoBeShippedTableCtrl.h"
CFtoBeShippedTableCtrl *toBeShippedCtrl = [[CFtoBeShippedTableCtrl alloc]init];
// toBeShippedCtrl.view.backgroundColor = [UIColor colorWithRed:1.000 green:0.893 blue:0.387 alpha:1.000];
toBeShippedCtrl.title = @"待发货";
[self addChildViewController:toBeShippedCtrl];
//待收货
//#import "CFreceiptOfGoodsTabelCtrl.h"
CFreceiptOfGoodsTabelCtrl *receiptOfGoodsCtrl = [[CFreceiptOfGoodsTabelCtrl alloc]init];
// receiptOfGoodsCtrl.view.backgroundColor = [UIColor colorWithRed:1.000 green:0.118 blue:0.783 alpha:1.000];
receiptOfGoodsCtrl.title = @"待收货";
[self addChildViewController:receiptOfGoodsCtrl];
//我的订单
//#import "CFmyOrderTabelCtrl.h"
CFmyOrderTabelCtrl *myOrderCtrl = [[CFmyOrderTabelCtrl alloc]init];
//myOrderCtrl.view.backgroundColor = [UIColor colorWithRed:1.000 green:0.160 blue:0.108 alpha:1.000];
myOrderCtrl.title = @"我的订单";
[self addChildViewController:myOrderCtrl];
// NSLog(@"子控制器有: %@",self.childViewControllers);
}
/**
* @author 李洪强, 16-08-30 16:08:10
*
* **02 - 设置顶部的标签栏*/
- (void)setupTitlesView{
// 标签栏整体
UIView *titlesView = [[UIView alloc] init];
titlesView.backgroundColor = [[UIColor whiteColor] colorWithAlphaComponent:0.7];
titlesView.width = self.view.width;
titlesView.height = CFTitlesViewH;
titlesView.y = 0;
[self.view addSubview:titlesView];
self.titlesView = titlesView;
// 底部的橙色指示器
UIView *indicatorView = [[UIView alloc] init];
indicatorView.backgroundColor = [UIColor orangeColor];
indicatorView.height = 2;
indicatorView.tag = -1;
indicatorView.y = titlesView.height - indicatorView.height;
self.indicatorView = indicatorView;
// 内部的子标签
CGFloat width = titlesView.width / self.childViewControllers.count;
CGFloat height = titlesView.height;
for (NSInteger i = 0; i<self.childViewControllers.count; i++) {
UIButton *button = [[UIButton alloc] init];
button.tag = i;
button.height = height;
button.width = width;
button.x = i * width;
UIViewController * vc = self.childViewControllers[i];
[button setTitle:vc.title forState:UIControlStateNormal];
// [button layoutIfNeeded]; // 强制布局(强制更新子控件的frame)
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor orangeColor] forState:UIControlStateDisabled];
button.titleLabel.font = [UIFont systemFontOfSize:14];
[button addTarget:self action:@selector(titleClick:) forControlEvents:UIControlEventTouchUpInside];
[titlesView addSubview:button];
// 默认点击了第一个按钮
if (i == 0) {
button.enabled = NO;
self.selectedButton = button;
// 让按钮内部的label根据文字内容来计算尺寸
[button.titleLabel sizeToFit];
self.indicatorView.width = button.width;
self.indicatorView.centerX = button.centerX;
}
}
[titlesView addSubview:indicatorView];
/**
李洪强-2016-8-31
添加顶部标题栏的竖线*/
CGFloat lineW = 1;
CGFloat lineH = 20;
for(NSInteger i = 0; i < 3; i++){
UIView *lineView = [[UIView alloc]init];
lineView.backgroundColor = [UIColor colorWithWhite:0.845 alpha:1.000];
lineView.x = i*self.selectedButton.width + self.selectedButton.width;
lineView.y = 12;
lineView.frame = CGRectMake(lineView.x, lineView.y, lineW, lineH);
[self.titlesView addSubview:lineView];
}
}
- (void)titleClick:(UIButton *)button
{
// 修改按钮状态
self.selectedButton.enabled = YES;
button.enabled = NO;
self.selectedButton = button;
// 动画
[UIView animateWithDuration:0.25 animations:^{
self.indicatorView.width = button.width;
self.indicatorView.centerX = button.centerX;
}];
// 滚动
CGPoint offset = self.contentView.contentOffset;
offset.x = button.tag * self.contentView.width;
[self.contentView setContentOffset:offset animated:YES];
}
// 03 - 底部的scrollView
- (void)setupContentView{
// 不要自动调整inset
self.automaticallyAdjustsScrollViewInsets = NO;
UIScrollView *contentView = [[UIScrollView alloc] init];
// contentView.frame = self.view.bounds;
contentView.frame = CGRectMake(self.view.x, 40, CFScreenW, CFScreenH - 150);
contentView.delegate = self;
contentView.pagingEnabled = YES;
[self.view insertSubview:contentView atIndex:0];
contentView.contentSize = CGSizeMake(contentView.width * self.childViewControllers.count, 0);
self.contentView = contentView;
// 添加第一个控制器的view
[self scrollViewDidEndScrollingAnimation:contentView];
}
//1 待支付
- (IBAction)toBePaid:(id)sender {
NSLog(@"点击了待支付按钮");
self.orangeView1.hidden = NO;
self.orangeView2.hidden = YES;
self.orangeView3.hidden = YES;
self.orangeView4.hidden = YES;
CGFloat offsetX = 0 * self.contentsScrollView.frame.size.width;
CGPoint offset = CGPointMake(offsetX, self.contentsScrollView.contentOffset.y);
// 设置偏移量
[self.contentsScrollView setContentOffset:offset animated:YES];
self.tobePaidBtn.selected = YES;
self.toBeShippedBtn.selected = NO;
self.receiptOfGoodsBtn.selected = NO;
self.myOrderBtn.selected = NO;
}
/** 2待发货*/
//toBeShipped
- (IBAction)toBeShipped:(id)sender {
NSLog(@"点击了代发货");
self.orangeView1.hidden = YES;
self.orangeView2.hidden = NO;
self.orangeView3.hidden = YES;
self.orangeView4.hidden = YES;
CGFloat offsetX = 1 * self.contentsScrollView.frame.size.width;
CGPoint offset = CGPointMake(offsetX, self.contentsScrollView.contentOffset.y);
// 设置偏移量
[self.contentsScrollView setContentOffset:offset animated:YES];
self.tobePaidBtn.selected = NO;
self.toBeShippedBtn.selected = YES;
self.receiptOfGoodsBtn.selected = NO;
self.myOrderBtn.selected = NO;
}
/** 3待收货*/
//receiptOfGoods
- (IBAction)receiptOfGoods:(id)sender {
NSLog(@"点击了待收货按钮");
self.orangeView1.hidden = YES;
self.orangeView2.hidden = YES;
self.orangeView3.hidden = NO;
self.orangeView4.hidden = YES;
self.tobePaidBtn.selected = NO;
self.toBeShippedBtn.selected = NO;
self.receiptOfGoodsBtn.selected = YES;
self.myOrderBtn.selected = NO;
CGFloat offsetX = 2 * self.contentsScrollView.frame.size.width;
CGPoint offset = CGPointMake(offsetX, self.contentsScrollView.contentOffset.y);
// 设置偏移量
[self.contentsScrollView setContentOffset:offset animated:YES];
}
/*4*我的订单*/
//myOrder
- (IBAction)myOrder:(id)sender {
NSLog(@"点击了我的订单按钮");
self.orangeView1.hidden = YES;
self.orangeView2.hidden = YES;
self.orangeView3.hidden = YES;
self.orangeView4.hidden = NO;
CGFloat offsetX = 3 * self.contentsScrollView.frame.size.width;
CGPoint offset = CGPointMake(offsetX, self.contentsScrollView.contentOffset.y);
// 设置偏移量
[self.contentsScrollView setContentOffset:offset animated:YES];
self.tobePaidBtn.selected = NO;
self.toBeShippedBtn.selected = NO;
self.receiptOfGoodsBtn.selected = NO;
self.myOrderBtn.selected = YES;
}
#pragma mark - <UIScrollViewDelegate> Scrollview的代理方法
/**
* 在scrollView动画结束时调用(添加子控制器的view到self.contentsScrollView)
* self.contentsScrollView == scrollView
* 用户手动触发的动画结束,不会调用这个方法
*/
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
// 当前的索引
NSInteger index = scrollView.contentOffset.x / scrollView.width;
// 取出子控制器
UIViewController *vc = self.childViewControllers[index];
vc.view.x = scrollView.contentOffset.x;
vc.view.y = 0; // 设置控制器view的y值为0(默认是20)
vc.view.height = scrollView.height; // 设置控制器view的height值为整个屏幕的高度(默认是比屏幕高度少个20)
[scrollView addSubview:vc.view];
}
/**
* 当scrollView停止滚动时调用这个方法(用户手动触发的动画停止,会调用这个方法)
*/
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
[self scrollViewDidEndScrollingAnimation:scrollView];
// 点击按钮
NSInteger index = scrollView.contentOffset.x / scrollView.width;
[self titleClick:self.titlesView.subviews[index]];
}
- (void)dealloc
{
}
/**
* SVProgressHUD 消失方法
*
* @return
*/
- (void)dismiss{
[SVProgressHUD dismiss];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1) {
NSString * str = [NSString stringWithFormat:@"telprompt://%@",self.phoneNo];
NSURL * url = [NSURL URLWithString:str];
[[UIApplication sharedApplication] openURL:url];
}
}
@end
VTMagic的使用的更多相关文章
- VTMagic 的使用介绍
VTMagic 有很多开发者曾尝试模仿写出类似网易.腾讯等应用的菜单分页组件,但遍观其设计,大多都比较粗糙,不利于后续维护和扩展.琢磨良久,最终决定开源这个耗时近两年打磨而成的框架,以便大家可以快速实 ...
- 开源框架VTMagic的使用介绍
VTMagic 有很多开发者曾尝试模仿写出类似网易.腾讯等应用的菜单分页组件,但遍观其设计,大多都比较粗糙,不利于后续维护和扩展.琢磨良久,最终决定开源这个耗时近两年打磨而成的框架,以便大家可以快速实 ...
- 深度解析开发项目之 02 - 使用VTMagic实现左右滑动的列表页
深度解析开发项目之 02 - 使用VTMagic实现左右滑动的列表页 实现效果: 01 - 导入头文件 02 - 遵守代理协议 03 - 声明控制器的属性 04 - 设置声明属性的frame 05 - ...
- iOS比较常用的第三方及实例(不断更新中)
把平时看到或项目用到的一些插件进行整理,文章后面分享一些不错的实例,若你有其它的插件欢迎分享,不断的进行更新: 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com ...
- addChildViewController相关api深入剖析
注:本文根据个人的实践和理解写成,若有不当之处欢迎斧正和探讨! addChildViewController是一个从iOS5开始支持的api接口,相关的一系列的接口是用来处理viewcontrolle ...
- 李洪强iOS开发之后使用纯代码实现横向滚动的UIScrollView
李洪强iOS开发之后使用纯代码实现横向滚动的UIScrollView (VTmagic是一个实现左右滚动的控制器的框架,也可以实现此功能) 实现的效果: 01 - 创建四个控制器 02 - 定义需要 ...
- xxx app 项目问题解决一览
前话:作为人生旅途中的小记录 不同账号玩法限制 解决 <vn_rule>x</vn_rule> 6.调整下注筹码 **** 解决 不同账号的玩法限制 **** ...
- iOS开发常用第三方开源框架 持续更新中...
键盘管理 TPKeyboardAvoiding IQKeyboardManager(1.2.8) 弹窗HUD MBProgressHUD(0.9.2) SVProgressHUD UIView+Toa ...
- iOS 热门高效开源库集锦,收藏备用
一.推荐使用的第三方库 1:基于响应式编程思想的ReactiveCocoa 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:iOS解耦与组件化开 ...
随机推荐
- JS数组专题1️⃣ ➖ 数组扁平化
一.什么是数组扁平化 扁平化,顾名思义就是减少复杂性装饰,使其事物本身更简洁.简单,突出主题. 数组扁平化,对着上面意思套也知道了,就是将一个复杂的嵌套多层的数组,一层一层的转化为层级较少或者只有一层 ...
- docker-ce快速部署
配置yum源wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget -O ...
- 剑指Offer(书):替换空格
题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 分析:通常来说,这样的题有两种方式 ...
- 算法导论 第一章and第二章(python)
算法导论 第一章 算法 输入--(算法)-->输出 解决的问题 识别DNA(排序,最长公共子序列,) # 确定一部分用法 互联网快速访问索引 电子商务(数值算 ...
- 用python做分布式定时器
分布式任务系统 (Python) github地址 https://github.com/thomashuang/Lilac/blob/master/README.rst 这里将介绍Liac的设计架构 ...
- P2866 糟糕的一天
糟糕的一天 洛谷链接 挺水的一道题,也就是看每个数后面有多少数比它小,最后把总数加起来. 我们可以用单调栈来实现,并用一个数组来保存每个数现在的状态. 代码: #include<cstdio&g ...
- oracle 恢复中的switch datafile all是什么意思
使用rman进行恢复时,如果使用了set name修改文件路径,那么恢复后,控制文件里面的信息是没有修改该的,如果要同步控制文件的信息那么就需要使用 switch datafile allall这个可 ...
- poj2446 Chessboard 【最大匹配】
题目大意:一个n*m的棋盘,某些格子不能用,问用1*2的骨牌能否完全覆盖这个棋盘,当然,骨牌不能有重叠 思路:显然黑白染色后,一个骨牌只能覆盖一个白色格子和一个黑色格子,然后我们间二染色建图,看能否有 ...
- 【BZOJ1834】network 网络扩容(最大流,费用流)
题意:给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的最小扩容费用. ...
- 【BZOJ1237】配对(贪心,DP)
题意:有n个a[i]和b[i],调整顺序使abs(a[i]-b[i])之和最小,但a[i]<>b[i].保证所有 Ai各不相同,Bi也各不相同. 30%的数据满足:n <= 104 ...