*****初始化

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
// ios6显示状态栏
application.statusBarHidden = NO; // 设置状态栏的颜色
application.statusBarStyle = UIStatusBarStyleLightContent; return YES;
}

*******ILTabBarViewController.m自定义UITabBarController

#import "ILTabBarViewController.h"

#import "ILTabBar.h"

@interface ILTabBarViewController ()<ILTabBarDelegate>

@end

@implementation ILTabBarViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view. // 创建tabBar
ILTabBar *tabBar = [[ILTabBar alloc] init]; tabBar.delegate = self; tabBar.frame = self.tabBar.bounds; // 因为系统自动隐藏的是系统自带的tabBar
[self.tabBar addSubview:tabBar]; //加上自定义的tabBar NSString *imageName = nil; NSString *selImageName = nil; for (int i = ; i < self.childViewControllers.count; i++) { //遍历自己管理的Controllers imageName = [NSString stringWithFormat:@"TabBar%d",i + ];
selImageName = [NSString stringWithFormat:@"TabBar%dSel",i + ]; // 添加底部按钮
[tabBar addTabBarButtonWithName:imageName selName:selImageName]; } } // 代理方法
- (void)tabBar:(ILTabBar *)tabBar didSelectedIndex:(int)index
{
self.selectedIndex = index; //点击底部按钮切换
}
@end

************ILTabBarViewController.h

#import <UIKit/UIKit.h>

@interface ILTabBarViewController : UITabBarController

@end

*********ILTabBar.h自定义ILTabBar

#import <UIKit/UIKit.h>
// block作用:保存一段代码,到恰当的时候再去调用 // 如果需要传参数给其他对象,block才需要定义参数
//typedef void(^ILTabBarBlock)(int selectedIndex); @class ILTabBar; @protocol ILTabBarDelegate <NSObject> @optional
- (void)tabBar:(ILTabBar *)tabBar didSelectedIndex:(int)index; @end @interface ILTabBar : UIView //// 相当于小弟
//@property (nonatomic, copy) ILTabBarBlock block; @property (nonatomic, weak) id<ILTabBarDelegate> delegate; // 给外界创建按钮
- (void)addTabBarButtonWithName:(NSString *)name selName:(NSString *)selName; @end

*********ILTabBar.m自定义ILTabBar

#import "ILTabBar.h" 

#import "ILTabBarButton.h"

@interface ILTabBar()

@property (nonatomic, weak) UIButton *selectedButton;

@end

@implementation ILTabBar

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code }
return self;
} // 提供一个方法给外界添加按钮
- (void)addTabBarButtonWithName:(NSString *)name selName:(NSString *)selName
{
// 创建按钮
ILTabBarButton *btn = [ILTabBarButton buttonWithType:UIButtonTypeCustom]; // 设置按钮的图片
[btn setBackgroundImage:[UIImage imageNamed:name] forState:UIControlStateNormal]; [btn setBackgroundImage:[UIImage imageNamed:selName] forState:UIControlStateSelected]; // 监听按钮的点击
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchDown]; [self addSubview:btn]; } // 点击按钮的时候调用
- (void)btnClick:(UIButton *)button
{
// 取消之前选择按钮
_selectedButton.selected = NO;
// 选中当前按钮
button.selected = YES;
// 记录当前选中按钮
_selectedButton = button; // 切换控制器
if ([_delegate respondsToSelector:@selector(tabBar:didSelectedIndex:)]) {
[_delegate tabBar:self didSelectedIndex:button.tag];
} } #warning 设置按钮的位置
- (void)layoutSubviews
{
[super layoutSubviews]; CGFloat btnW = self.bounds.size.width / self.subviews.count;
CGFloat btnH = self.bounds.size.height;
CGFloat btnX = ;
CGFloat btnY = ; // 设置按钮的尺寸
for (int i = ; i < self.subviews.count; i++) {
UIButton *btn = self.subviews[i]; // 绑定角标
btn.tag = i; btnX = i * btnW; btn.frame = CGRectMake(btnX, btnY, btnW, btnH); // 默认选中第一个按钮
if (i == ) {
[self btnClick:btn];
}
} } /*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/ @end

****ILTabBarButton.m自定义UIbutton.m

#import "ILTabBarButton.h"

@implementation ILTabBarButton

// 取消高亮状态
- (void)setHighlighted:(BOOL)highlighted
{
} @end

***********ILNavigationController.m

#import "ILNavigationController.h"

@interface ILNavigationController ()

@end

@implementation ILNavigationController

// 第一次使用这个类或者这个类的子类的时候
+ (void)initialize
{
if (self == [ILNavigationController class]) { // 肯定能保证只调用一次
// 获取应用程序中所有的导航条
// 获取所有导航条外观
UINavigationBar *bar = [UINavigationBar appearance]; UIImage *navImage = nil; if (ios7) {
navImage = [UIImage imageNamed:@"NavBar64"];
}else{
navImage = [UIImage imageNamed:@"NavBar"];
}
[bar setBackgroundImage:navImage forBarMetrics:UIBarMetricsDefault]; NSDictionary *dict = @{
NSForegroundColorAttributeName : [UIColor whiteColor],
NSFontAttributeName : [UIFont systemFontOfSize:]
};
[bar setTitleTextAttributes:dict];
}
} - (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"%s",__func__); } - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated //跳转隐藏导航栏
{
viewController.hidesBottomBarWhenPushed = YES; return [super pushViewController:viewController animated:animated];
} @end

*****ILNavigationController.h

#import <UIKit/UIKit.h>

@interface ILNavigationController : UINavigationController

@end

*****我的彩票界面,拉升图片工具 ILLoginViewController.m

#import "ILLoginViewController.h"

#import "UIImage+Tool.h"

@interface ILLoginViewController ()
@property (weak, nonatomic) IBOutlet UIButton *loginBtn; @end @implementation ILLoginViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
} - (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view. // 设置登录按钮的拉伸好的图片
[_loginBtn setBackgroundImage:[UIImage imageWithResizableImageName:@"RedButton"] forState:UIControlStateNormal]; [_loginBtn setBackgroundImage:[UIImage imageWithResizableImageName:@"RedButtonPressed"] forState:UIControlStateHighlighted];
} - (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} /*
#pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/ @end

******UIImage+Tool.m

#import "UIImage+Tool.h"

@implementation UIImage (Tool)

+ (instancetype)imageWithResizableImageName:(NSString *)imageName
{
UIImage *image = [UIImage imageNamed:imageName]; image = [image stretchableImageWithLeftCapWidth:image.size.width * 0.5 topCapHeight:image.size.height * 0.5]; return image;
} @end

IOS彩票第一天基本框架搭建的更多相关文章

  1. 基于WebDriverAgent代理服务,实现iOS手机app自动化测试的框架搭建

    iOS自动化测试一直使用的appium,iOS系统升级至10.0 Xcode8.0之后, 改用WebDriverAgent代理服务作为server,编写了一套基于WebDriverAgent服务 ap ...

  2. iOS 新浪微博-1.0框架搭建

    项目搭建 1.新建一个微博的项目,去掉屏幕旋转 2.设置屏幕方向-->只有竖向 3.使用代码构建UI,不使用storyboard 4.配置图标AppIcon和LaunchImage 将微博资料的 ...

  3. IOS开发-基于WebDriverAgent代理服务,实现iOS手机app自动化测试的框架搭建

    导引 iOS自动化测试一直使用的appium,iOS系统升级至10.0 Xcode8.0之后,改用WebDriverAgent代理服务作为server,编写了一套基于WebDriverAgent服务 ...

  4. ThinkPHP框架搭建及常见问题(Apache或MySQL无法启动)----简单的初体验

    有一定基础的人勿进,这篇讲的只是零基础入门,都是我刚接触以及我所了解到的人刚开始有疑惑的地方,具体框架介绍会在后面的博客中介绍 这一篇只是为了一个简单的页面显示而介绍的方法,不涉及代码,开发环境,所以 ...

  5. 【Java EE 学习 69 中】【数据采集系统第一天】【SSH框架搭建】

    经过23天的艰苦斗争,终于搞定了数据采集系统~徐培成老师很厉害啊,明明只是用了10天就搞定的项目我却做了23天,还是模仿的...呵呵,算了,总之最后总算是完成了,现在该好好整理该项目了. 第一天的内容 ...

  6. Struts2+Spring+Hibernate+Jbpm技术实现Oa(Office Automation)办公系统第一天框架搭建

    =============编码规范,所有文健,所有页面,所有数据库的数据表都采用UTF-8编码格式,避免乱码:===========开发环境:jdk1.7+tomcat8.0+mysql5.7+ecl ...

  7. Unity 游戏框架搭建 2019 (九~十二) 第一章小结&第二章简介&第八个示例

    第一章小结 为了强化教程的重点,会在合适的时候进行总结与快速复习. 第二章 简介 在第一章我们做了知识库的准备,从而让我们更高效地收集示例. 在第二章,我们就用准备好的导出工具试着收集几个示例,这些示 ...

  8. Unity 游戏框架搭建 2019 (二十五) 类的第一个作用 与 Obselete 属性

    在上一篇我们整理到了第七个示例,我们今天再接着往下整理.我们来看第八个示例: #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; ...

  9. Unity 游戏框架搭建 2019 (二十六) 第一轮整理完结

    昨天呢我们把第八个示例整理完了.整理之后学习了类的第一作用:方法的集合,还有 Obselete 这个 API.并且在进行整理的时候贯彻了我们新的约定和规则:先确保功能有效,再去做变更和删除. 今天我们 ...

随机推荐

  1. HTML DOM学习之一

    1.HTML DOM定义了访问和操作HTML文档的标准方法:DOM以树型结构表达了HTML文档: 2.DOM是W3C的标准,定义了访问HTML和XML文档的标准: DOM(文档对象模型)是中立于平台和 ...

  2. spark 部署问题

    spark的web UI 端口设置:spark-env.sh 中设置SPARK_MASTER_WEBUI_PORT 为自己想设置的端口号. 其他worker 的web UI 端口默认:8081 mas ...

  3. POJ3686 The Windy's(最小费用最大流)

    题目大概说要用m个工厂生产n个玩具,第i个玩具在第j个工厂生产要Zij的时间,一个工厂同一时间只能生成一个玩具,问最少的用时. 这题建的图不是很直观.. 源点向玩具连容量1费用0的边 将每个工厂拆成n ...

  4. Facebook React.js库 入门实例教程

    作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩 ...

  5. CSS3 transform rotate(旋转)锯齿的解决办法

    -moz-transform: rotate(5deg);-webkit-transform: rotate(5deg); 把图片旋转了5度.本以为轻而易举,可遇到了问题.在Fireofx中显示正常, ...

  6. jQuery自定义滚动条样式插件mCustomScrollbar

    如果你构建一个很有特色和创意的网页,那么肯定希望定义网页中的滚动条样式,这方面的 jQuery 插件比较不错的,有两个:jScrollPane 和 mCustomScrollbar. 关于 jScro ...

  7. vsfptd

    如果想通过vsftpd来在主机和虚拟机之间拿数据,可以通过这种方法: 在主机的资源管理器中输入:ftp://虚拟机里面Linux的IP(如192.168.2.112)/ 如果反过来,需要如下:ftp: ...

  8. Javascript 异步编程的4种方法

    你可能知道,Javascript语言的执行环境是"单线程"(single thread). 所谓"单线程",就是指一次只能完成一件任务.如果有多个任务,就必须排 ...

  9. #define is unsafe——I

    I. #define is unsafe Have you used #define in C/C++ code like the code below? #include <stdio.h&g ...

  10. [LintCode] Segment Tree Build 建立线段树

    The structure of Segment Tree is a binary tree which each node has two attributes start and end deno ...