[iOS UI进阶 - 2.0] 彩票Demo v1.0










// 覆盖setHighlighted,取消点击时的高亮状态
- (void)setHighlighted:(BOOL)highlighted {
// [super setHighlighted:highlighted];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// 1.删除原来的TabBar
[self.tabBar removeFromSuperview];
// 2.添加自定义TabBar
HVWTabBar *hvwTabBar = [[HVWTabBar alloc] init];
hvwTabBar.frame = self.tabBar.frame;
hvwTabBar.backgroundColor = [UIColor greenColor]; // 设置绿色底的tabBar,稍后会被按钮图片覆盖
[self.view addSubview:hvwTabBar];
// 3.添加按钮
for (int i=; i<; i++) {
// 3.1创建按钮
HVWTabBarButton *button = [HVWTabBarButton buttonWithType:UIButtonTypeCustom];
button.tag = i;
// 3.2设置按钮背景图片
[button setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"TabBar%d", i+]] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"TabBar%dSel", i+]] forState:UIControlStateSelected];
// 3.3设置frame
CGFloat buttonWidth = hvwTabBar.frame.size.width / ;
CGFloat buttonHeight = hvwTabBar.frame.size.height;
CGFloat buttonX = i * buttonWidth;
CGFloat buttonY = ;
button.frame = CGRectMake(buttonX, buttonY, buttonWidth, buttonHeight);
// 3.4添加到tabBar
[hvwTabBar addSubview:button];
// 3.5添加监听事件
[button addTarget:self action:@selector(tabBarButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
// 3.6默认已经点击了第一个按钮
if (i == ) {
[self tabBarButtonClicked:button];
}
}
}
- (void) tabBarButtonClicked:(HVWTabBarButton *) button {
// 1.取消选中之前的按钮
self.selectedButton.selected = NO;
// 2.选中新点击的按钮
button.selected = YES;
// 3.设置为当前选中的按钮
self.selectedButton = button;
// 4.切换子控制器
self.selectedIndex = button.tag;
}


//
// HWTabBarController.m
// HelloLottery
//
// Created by hellovoidworld on 14/12/31.
// Copyright (c) 2014年 hellovoidworld. All rights reserved.
// #import "HvWTabBarController.h"
#import "HVWTabBar.h"
#import "HVWTabBarButton.h" @interface HVWTabBarController () <HVWTabBarDelegate> @end @implementation HVWTabBarController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view. // 1.删除原来的TabBar
[self.tabBar removeFromSuperview]; // 2.添加自定义TabBar
HVWTabBar *hvwTabBar = [[HVWTabBar alloc] init];
hvwTabBar.frame = self.tabBar.frame;
hvwTabBar.backgroundColor = [UIColor greenColor]; // 设置绿色底的tabBar,稍后会被按钮图片覆盖
hvwTabBar.delegate = self;
[self.view addSubview:hvwTabBar];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} #pragma mark - HVWTabBarDelegate 代理方法
- (void)hvwTabBar:(HVWTabBar *)hvwTabBar didClickedButtonFrom:(int)from to:(int)to {
// 切换子控制器
self.selectedIndex = to;
} @end
//
// HVWTabBar.h
// HelloLottery
//
// Created by hellovoidworld on 14/12/31.
// Copyright (c) 2014年 hellovoidworld. All rights reserved.
// #import <UIKit/UIKit.h> @class HVWTabBar; /** 代理协议 */
@protocol HVWTabBarDelegate <NSObject>
@optional
- (void) hvwTabBar:(HVWTabBar *) hvwTabBar didClickedButtonFrom:(int) from to:(int) to;
@end @interface HVWTabBar : UIView /** 代理 */
@property(nonatomic, weak) id<HVWTabBarDelegate> delegate; @end
//
// HVWTabBar.m
// HelloLottery
//
// Created by hellovoidworld on 14/12/31.
// Copyright (c) 2014年 hellovoidworld. All rights reserved.
// #import "HVWTabBar.h"
#import "HVWTabBarButton.h" #define HVWTabBarButtonCount 5 @interface HVWTabBar() @property(nonatomic, weak) HVWTabBarButton *selectedButton; @end @implementation HVWTabBar // 重写initWithFrame方法,添加tabBar按钮
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self initButtons];
} return self;
} /** 初始化按钮 */
- (void) initButtons {
for (int i=; i<HVWTabBarButtonCount; i++) {
// 3.1创建按钮
HVWTabBarButton *button = [HVWTabBarButton buttonWithType:UIButtonTypeCustom];
button.tag = i; // 3.2设置按钮背景图片
[button setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"TabBar%d", i+]] forState:UIControlStateNormal]; [button setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"TabBar%dSel", i+]] forState:UIControlStateSelected]; // 3.3添加到tabBar
[self addSubview:button]; // 3.4添加监听事件
[button addTarget:self action:@selector(tabBarButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; // 3.5默认已经点击了第一个按钮
if (i == ) {
[self tabBarButtonClicked:button];
}
}
} /** 初始化子控件的位置尺寸 */
- (void)layoutSubviews {
[super layoutSubviews]; for (int i=; i<HVWTabBarButtonCount; i++) {
HVWTabBarButton *button = self.subviews[i];
CGFloat buttonWidth = self.frame.size.width / ;
CGFloat buttonHeight = self.frame.size.height;
CGFloat buttonX = i * buttonWidth;
CGFloat buttonY = ;
button.frame = CGRectMake(buttonX, buttonY, buttonWidth, buttonHeight);
}
} - (void) tabBarButtonClicked:(HVWTabBarButton *) button {
// 1.调用代理方法,通知TabBarController切换子控制器
if ([self.delegate respondsToSelector:@selector(hvwTabBar:didClickedButtonFrom:to:)]) {
[self.delegate hvwTabBar:self didClickedButtonFrom:self.selectedButton.tag to:button.tag];
} // 2.取消选中之前的按钮
self.selectedButton.selected = NO; // 3.选中新点击的按钮
button.selected = YES; // 4.设置为当前选中的按钮
self.selectedButton = button;
} @end



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// 设置状态栏样式为白色
application.statusBarStyle = UIStatusBarStyleLightContent;
return YES;
}

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// 1.添加自定义TabBar
HVWTabBar *hvwTabBar = [[HVWTabBar alloc] init];
hvwTabBar.frame = self.tabBar.bounds;
hvwTabBar.delegate = self;
// 2.设置tabBar
[self.tabBar addSubview:hvwTabBar];
}
//
// HVWNavigationController.m
// HelloLottery
//
// Created by hellovoidworld on 15/1/1.
// Copyright (c) 2015年 hellovoidworld. All rights reserved.
// #import "HVWNavigationController.h" @interface HVWNavigationController () @end @implementation HVWNavigationController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view. } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} /** 类初始化方法,仅调用一次 */
+ (void) initialize {
// 获取能够控制所有NavigationBar的实例
UINavigationBar *navBar = [UINavigationBar appearance]; // 设置背景图片
NSString *bgImageName;
if (iOS7) { // 在HelloLottery-Prefix.pch中定义了判断iOS版本的全局变量
bgImageName = @"NavBar64";
} else {
bgImageName = @"NavBar";
} [navBar setBackgroundImage:[UIImage imageNamed:bgImageName] forBarMetrics:UIBarMetricsDefault]; // 设置文本
NSMutableDictionary *attr = [NSMutableDictionary dictionary];
attr[NSForegroundColorAttributeName] = [UIColor whiteColor];
attr[NSFontAttributeName] = [UIFont systemFontOfSize:];
[navBar setTitleTextAttributes:attr];
} // 拦截所有的push操作
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
viewController.hidesBottomBarWhenPushed = YES; // 这是原来NavigationController中的tabBar,所以要设置自定义的tabBar为Navigation中的tabBar
[super pushViewController:viewController animated:YES];
} @end
[iOS UI进阶 - 2.0] 彩票Demo v1.0的更多相关文章
- [iOS UI进阶 - 2.4] 彩票Demo v1.4 转盘动画
A.需求 幸运广场界面中有一个幸运转盘,平时能够自动缓缓转动 能够选择星座 点击“开始选号”开速旋转转盘,旋转一定周数 转盘转动速度节奏:开始-慢-块-慢-结束 设置其余的背景和按钮 code s ...
- [iOS UI进阶 - 2.1] 彩票Demo v1.1
A.需求 1.优化项目设置 2.自定义导航栏标题按钮 3.多版本处理 4.iOS6和iOS7的适配 5.设置按钮背景 6.设置值UIBarButtonItem样式 code source: htt ...
- [iOS UI进阶 - 2.3] 彩票Demo v1.3
A.需求 真机调试 "关于”模块 存储开关状态 打电话.发短信 应用评分 打开其他应用 cell 在iOS6 和 iOS7的适配 block的循环引用 屏幕适配 code source: ...
- [iOS UI进阶 - 2.2] 彩票Demo v1.2 UICollectionView基本
A.需要掌握的 设计.实现设置界面 cell的封装 UICollectionView的使用 自定义UICollectionView 抽取控制器父类 "帮助"功能 code sour ...
- 【iCore4 双核心板】DEMO V1.0 测试程序发布
iCore4 Demo V1.0程序说明 一.概要 本资料包含5个文件夹: 1.“arm”里是iCore4上arm的程序包,开发环境为KEIL5.17: 2.“fpga”里是iCore4上FPGA的程 ...
- 【iCore1S 双核心板】DEMO V1.0 测试程序发布
iCore1S Demo V1.0程序说明 一.概要 本资料包含5个文件夹: 1.“ARM”里是iCore1S上ARM的程序包,开发环境为KEIL5.17: 2.“FPGA”里是iCore1S上FPG ...
- Nuget自己打包引用的时候出现错误:Package is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package 1.0.1 supports: net (.NETFramework,Version=v0.0)
Nuget自己打包引用的时候出现错误:Package is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package ...
- [iOS UI进阶 - 4.0] 涂鸦app Demo
A.需求 1.超简易画图,只有一种画笔 2.清屏功能 3.回退功能 4.保存功能 5.使用了cocos2D code source: https://github.com/hellovoidwor ...
- [iOS UI进阶 - 5.0] 手势解锁Demo
A.需求 1.九宫格手势解锁 2.使用了绘图和手势事件 code source: https://github.com/hellovoidworld/GestureUnlockDemo B ...
随机推荐
- IP地址分类及私网IP
5类IP地址: IP地址共有32位字节,其中A~C类IP地址由类标识号.网络地址和主机地址组成,A类标识最高位为0,网络地址为1字节,主机地址为3字节, B类标识最高位为10,网络地址为2字节,主机地 ...
- C++中求两个正整数的最大公约数和最小公倍数
最大公约数直接用辗转相除法,最小公倍数就是两个数的乘积除以最大公约数 #include<iostream> using namespace std; int gys(int x,int y ...
- ASP.NET中如何删除最近打开的项目和文件的记录
ASP.NTET中总是保留最近打开的项目和文件的记录,甚至是已删除的它也不删.下面介绍几种删除的方法: 第一种:建立一个bat文件,以后双击即可清除,内置代码如下: @echo off@REG Del ...
- C#中结构体的声明
定义: 结构是用户自定义的值类型 代码样式:struct Pair{ public int X, Y; //公有变量名单词的首字母大写(PascalCase规则)}struct Pa ...
- CodeForces Round #280 (Div.2)
A. Vanya and Cubes 题意: 给你n个小方块,现在要搭一个金字塔,金字塔的第i层需要 个小方块,问这n个方块最多搭几层金字塔. 分析: 根据求和公式,有,按照规律直接加就行,直到超过n ...
- Discuz 5.x/6.x/7.x投票SQL注入分析
看乌云有人爆了这个漏洞:http://www.wooyun.org/bugs/wooyun-2014-071516感觉应该是editpost.inc.php里投票的漏洞.因为dz已经确定不会再修补7. ...
- 图文详解YUV420数据格式
YUV格式有两大类:planar和packed.对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V.对于packed的YUV格式,每个像素点的Y,U ...
- AWK print学习
Awk是一种处理结构数据并输出格式化结果的编程语言, Awk 是其作者 "Aho,Weinberger,Kernighan" 的简称. Awk通常被用来进行格式扫描和处理.通过扫描 ...
- 如何寻找设计灵感?写给刚入行的设计师(转自UI中国)
如何寻找设计灵感?写给刚入行的设计师 如何寻找设计灵感? 这一次的文章,我想和大家聊聊年轻的设计师在没有那么多经验的情况下如何寻找设计师灵感.(希望这篇文章也能帮助感同身受的你) 每个设计师对设计都有 ...
- POJ 1860 Currency Exchange
题意:有n种货币,可以互相兑换,有m个兑换规则,兑换规则给出汇率r和手续费c,公式为b = (a - c) * r,从a货币兑换为b货币,问能不能通过不断的兑换赚钱,兑换期间手中的钱数不可以为负. 解 ...