再造轮子之网易彩票-第一季(IOS 篇 by sixleaves)
前言
在网上看了别人做的模仿网易彩票的项目, 于是也跟着用自己的想法做了一篇。
写这篇博客的目的, 在于UI综合的一次小练习, 同时总结和串联其各个控件之间的应用、封装思想等。考虑到有人上不了github, 代码会在最后一次性发到百度云盘, 敬请关注
工欲善其事, 必先利其器
一、画其形:
在做该项目前, 我们先把项目的大体框架搭好。再依次迭代开发, 逐渐完善所有的功能.
首先: 观察网易彩票项目的app, 先在手机上把整个app的功能都浏览一篇。可以大体上分析出框架的结构。
分析: 很明显在一进入的界面最下面是一个UITabBar, 而上面是UINavigationBar。并且当我们点击每个UITabBarButton的时候, 会切换到不同的UINavigation, 所以该app的构架是基于UITabBarController的多个UINavigation的切换。于是我们可以通过storyBoard快速搭建出下面的界面。

至于搭建的过程, 是十分基本的技能, 不在详细说明,需要注意的是记得在SB中指定初始化的控制器
以下是在模拟器中运行的效果图

二、画其神
我们把大体的软件轮廓给勾勒了出来, 接着我们应该思考应该从哪个方面入手继续迭代这个软件, 将其内容补充完整。也就是说我们有两种选择方法,
其一、我们可以选择从最有挑战难度的方面入手, 逐步完善。其二,我们可以选择从比较简单的方面切开个口子, 逐步完善。我还是比较推崇第二种
方法, 在我看来, 人们总是偏向于构建简单的事物, 而不是复杂的事物。简单的东西不容易出错,而复杂的东西具有太多需要考虑的方面,会因此有很
大的不稳定性。所以我选择从UITabBar入手, 由于该软件中, 我们只需要图片,而不需要底部的文字信息,所以我们自定义SWPTabBar,但我们不选择继承
自UITabBar, 因为其有些特性是我们不想要的, 继承自UIView。既然自定义了SWPTabBar那么这个控件必须也要具备一些UITabBar一样的控件。在这里一个SWPTabBar
必须有对应的数量的按钮(UITabBarController的子控制器个数)。而我们正是为了自己来确定这个按钮才自定义,所以还需要在自定义SWPButton,继承自
UIButton。在创建出三个对应的类之后, 必须记得到SB中更改各个控件关联的类。这里只需要更改, UITabBarController=====>SWPTabBarController。
想想为什么?
分析: 那么接下来我们如何应用自己定义的SWPTabBar, 和SWPButton呢? 首先我们要明确一点,SWPTabBar这个控件由SWPButton这个控件构成。所以我们思考的重点是
如何封装这个控件, 方便后续程序的扩展, 比如,某天,项目需求一改,项目经理规定把SWPTabBar的栏目切换为6个,或者删掉几个,换成三个。我们要做到的效果就是,当遇到
这种需求,只需要改几行的代码,插入几行新的代码,而不用去更改项目的整个构架就可以适应这种需求。当然这只是一个主要的标准。在达到这个标准之后,我们还需要注意
一点就是尽可能的规范代码,优化代码。
切开口子,跟我慢慢来:
1. 接着我们编写SWPTabBarController给其加入自定义的SWPTabBar。这样就能显示出自定义的TabBar了。想来看看这个纯洁的控件,还没添加按钮的时候。能不能
正常的显示到SWPTabBarController的View上。代码和实现效果如下, 比较简单其自己阅读代码
@implementation SWPTabBarControllerViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 添加自定义tabBar先测试下
SWPTabBar * tabBar = [[SWPTabBar alloc] init];
tabBar.frame = self.tabBar.frame;
tabBar.backgroundColor = [UIColor greenColor];
[self.view addSubview: tabBar];
}
@end

再造轮子之网易彩票-第一季(IOS 篇 by sixleaves)的更多相关文章
- 再造轮子之网易彩票-第二季(IOS 篇 by sixleaves)
02-彩票项目第二季 2.封装SWPTabBar方式一 接着我们思考如何进行封装.前面已经将过了为什么要封装, 和封装达到的效果.这里我们主要有两种封装方式,分别是站在不同的角度上看待问题.虽然角度不 ...
- 事件处理原理(IOS篇) by sixleaves
前言 了解IOS事件处理的本质关键要先掌握几个概念.首先是事件的派发(Event Delivery)的过程, 一个是响应者链条如何构成. 事件的派发: Q1: 你有没有想过,如果你一个屏幕中有多个的V ...
- iOS菜鸟成长笔记(2)——网易彩票练习
距离上一篇<第一个iOS应用>已经有一个多月了,今天来和大家一起学习和分享一下一个小练习<网易彩票> 首先我们向storyboard中拖入一个TabBarController和 ...
- iOS开发——实战总结OC篇&网易彩票开发知识点总结
网易彩票开发知识点总结 关于网易彩票开发中遇到了不少的坑,弄了好久才弄懂,或者有些犹豫很久没用就不记得了,所以这里就总结了一下,希望以后不会忘记,就算忘记也能快速查看! /************** ...
- iOS 网易彩票-6设置模块三(常用小功能)
该篇文章中,用到很多iOS开发过程中常用的小功能,当前只是将这些功能集成到网易彩票的设置中.iOS-常用小功能介绍,请参考我的另一篇文章: iOS 常用小功能 总结:http://www.cnblog ...
- QQ聊天界面的布局和设计(IOS篇)-第一季
我写的源文件整个工程会再第二季中发上来~,存在百度网盘, 感兴趣的童鞋, 可以关注我的博客更新,到时自己去下载~.喵~~~ QQChat Layout - 第一季 一.准备工作 1.将假数据messa ...
- iOS 网易彩票-4设置模块一
概述 基本上,每一款APP都有相应的设置模块.怎么设置才能更灵活和通用呢,这也是大家一直思考的.下面说说在网易彩票中,设置模块的设置思想. 基本上有三种方案: static cell(呆板,完全没有动 ...
- iOS 网易彩票-1框架搭建
仿网易彩票,最终要做成的效果如下: 一.分层搭建 1.新建一个项目,Lottery.只支持7.1以上坚屏. 2.将素材全部图片全部拉到相应的文件夹里. 3.选中Lottery--右键Show in F ...
- 今年第一季全球PC出貨量同比下降5.2%
市場調研公司Gartner上周發佈報告稱,隨著企業支出的下滑,今年第一季全球PC出貨量同比下降5.2%迪士尼美語評價.英特爾稱,第一季筆記本晶片出貨量同比增長3%,但是筆記本晶片的平均銷售價格下降了3 ...
随机推荐
- hdu1540-Tunnel Warfare (线段树区间合并)
题意:n个村庄,有三种操作,D x 破坏位置为x的村庄,R 修复上一次被破坏的村庄,Q x 输出含有x村庄的连续村庄的最大个数.线段树搞之,区间合并. ls[maxn]为当前节点左面的连续区间,rs[ ...
- python网络请求简洁之道--python requests简介
#requests中文文档:http://cn.python-requests.org/en/latest/#学习出处:http://mp.weixin.qq.com/s?__biz=MjM5NzU0 ...
- oracle 格式化数字 to_char
转:http://blog.csdn.net/chinarenzhou/article/details/5748965 Postgres 格式化函数提供一套有效的工具用于把各种数据类型(日期/时间,i ...
- js html5 仿微信摇一摇
看微信摇一摇之后忽然想知道他是怎么写的.于是就在网上查了一些资料,有些是借鉴别人的.大家共同学习啊 先放代码 <body onload="init()"> <p& ...
- viewstate加密(转)
ViewState在客户端展开的时候,默认是Auto,不加密的,如果页面有限制性的表单控件才加密,所以,可以查看,代码如下: byte[] bytes = Convert.FromBase64Stri ...
- 《第一行代码》学习笔记14-UI(3)
1. (1)所有控件都是直接或间接继承自View,所用的所有布局都是直接或间接继承自ViewGroup的. (2)View是Android中一种最基本的UI组件,可以在屏幕上绘制一块矩形区域,并能响应 ...
- linux 虚拟机centos64位_6.5+VM10 主机是固定IP局域网设置代理上网,虚机设置固定ip 图文详细步骤
一种: 虚机是Desktop 安装 1.虚拟机—设置—网络适配器子选项—选择“桥接模式” 2.在虚拟机中选择系统(System)—首选项(Preferences)—网络连接(Network Conne ...
- php统计文件夹大小
function dirsize($dir){ @$dh = opendir($dir); $size = 0; while($file = @readdir($dh)){ if($file!=&qu ...
- 512M内存机器如何用好Mysql
购买阿里云512M内存ECS后,mysql有时候会自动关闭,停止运行 解决办法: a,优化mysql配置,因为自己安装的是mysql 5.6,而从5.6开始,mysql安装包中不再包含my-small ...
- 记“debug alipay”一事
背景:客户支付成功,无法返回支付结果 ===================================== 查找原因,追踪代码: verified = AlipayNotify.verify(p ...