仿网易彩票思路
第1步、 项目的配置
1>
新建项目:项目前缀:把项目名称里面的大写抽出来。
2>
支持项目部署,支持ios6,ios7
3>
不支持横竖屏
4>
导入图标和启动图片
5>
程序启动的时候,隐藏状态栏,ios6需要恢复状态栏显示
6>
设置状态栏色彩 ios7默许状态栏交给控制器管理,修改info.plist文件,让状态栏交给application管理
6>
项目文件夹按模块划分,Main:(主框架,自定义tab控制器),Other:寄存其他头文件和.m文件(main,代理,pch(头文件))
第2步、 搭建项目主框架
1>
修改窗口的根控制器。
缘由:主窗口的根控制器是TabBar控制器,TabBar里面的子控制器是导航控制器?为何,由于每一个导航条的标题不1样。
第3步、设置tabBar上按钮的图片
存在的问题:
1>
设置tabBar上面的按钮图片不好使,tabBarButton的图片有规格,用不了。
解决方式:
1>
自定义tabBar,系统自带的tabBar上的tabBarButton都不好使,自定义的tabBar添加UIButton,注意继承UIView,由于UITabBar里面的子控件根本用不上。
2>
自定义tabBar,添加5个按钮,显示图片
存在的问题?
1> tabBar里面的按钮应当由控制器决定
2> push控制器的时候底部条,隐藏不了。
解决方法:
1> 提供1个方法,给控制器添加按钮。系统自带的tabBar里有多少按钮也是根据控制器个数决定的。
2> 把自定义tabBar添加到系统自带的tabBar上
第4步、点击按钮,切换控制器(UITabBarController.selectedIndex)
存在的问题?
1>
只有UITabBarController设置selectedIndex才可以切换控制器,但是UITabBarController不知道当前选中哪一个按钮
解决方式:
2>
用代理或block把角标传给控制器
第5步、设置导航条的外观(背景图片和文字),只需要设置1次.
1>
为何要获得全部利用程序的导航条外观?避免拿到1个1个导航控制器去设置导航条的外观
2>
怎样获得?UINavigationBar *navBar = [UINavigationBar appearance]
只要遵照UIAppearance这个协议,都可以这样获得。
3>
设置导航条的背景色彩?ios7和ios6是不1样的。
4>
运行ios6,适配ios6的导航条。
5> ios7和ios6导航条图片的区分?
ios7:控制器包括状态栏20的高度,导航条的高度为64,会自动把状态栏20的高度填充
ios6:状态栏20的高度不属于控制器,导航条高度44。用44高度的图片
6>
定义宏,方便适配 #define iOS7 ([[UIDevice currentDevice].systemVersion floatValue] >=
7.0)
7>
设置导航条文字色彩
第6步、自定义导航控制器
1>
为何要自定义导航控制器?拦截push操作,重写push方法,在push的时候,隐藏底部条,就不需要1个控制器1个控制器的勾选Hide
Bottom Bar on Push
2>
在自定义导航控制器设置导航条外观
3>
在initialize里设置:导航条外观只需要设置1次
4> initialize:在第1次使用这个类或子类的时候调用
5> initialize里判断下是不是是本类调用,是才需要设置导航条,保证设置1次主题。self
== [ILNavgationController class]
第7步、 完成每一个模块的导航条
购彩大厅:系统自带的UIBarButton不能同时设置图片和文字,拖1个按钮同时设置文字和图片,还需要设置按钮宽度,资讯和图片中间有间距。
//
设置按钮标题的位置
- (CGRect)titleRectForContentRect:(CGRect)contentRect;
//
设置按钮图片的位置
- (CGRect)imageRectForContentRect:(CGRect)contentRect;
合买跟单:titleView需要自定义按钮,设置内部的位置
第8步、自定义按钮:修改内部子控件的尺寸
1.获得当前文字:self.currentTitle
2.获得当前文字尺寸.计算内部Label的尺寸。
3.图片尺寸:假定图片宽度30.
w = contentRect.size.width -
30
注意点:
* titleRectForContentRect内部不能调用self.titleLabel,会造成死循环。由于self.titleLabel内部会调用titleRectForContentRect
* boundingRectWithSize在ios7才有,ios6没有这个方法,需要判断使用。
第9步、 自定义按钮尺寸计算-多版本处理
1>
理解编译时报错和运行时报错?#import <Availability.h>
2>
运行时报错:在SDK7.0的环境(xcode5)编译boundingRectWithSize,是不会报错的,但是运行在ios6的系统上会报错,ios6没有这个方法。需要判断当前运行在哪一个系统,用ios7宏判断。
3>
编译时报错:在SDK6.0的环境(xcode4.6)编译boundingRectWithSize,是直接报编译毛病,由于sdk6.0没有这个方法。
第10步、 我的彩票(登录界面)-ios7和ios6简单适配
存在问题
1>
视察UIImageView的y值
1> UIImageView的y值在ios6和ios7不1样。
缘由:
0> ios6,ios7控制器view的尺寸不1样。
1> ios6里主流框架中,导航控制器的根控制器view的尺寸,很小。PPT演示,ios6控制器从导航条开始,ios7从屏幕左上角开始,包括状态栏。
2> ios7多了1个edgesForExtendedLayout属性,才让导航控制器的根控制器view的尺寸和屏幕1样大.
3> edgesForExtendedLayout可让控制器上下左右扩大
解决:
1>
通过代码判断下,调剂在ios7和ios6的UIImageView的位置,这类方式麻烦。由于界面是固定的,用xib或storyboard描写更省时间。
2>
找到我的彩票控制器,告知他不要上下扩大就行了,找到Extend Edages,把Under Top Bars
和
Under Bottom Bars取消选中
2>
1般开发中,如果不需要转动的控制器,就不需要扩大,由于不需要有穿透效果。
3>
在ios7取消我的彩票控制器的上下扩大。这时候候ios7导航控制器的根控制器view的尺寸就和ios61样的了。
4> autolayout解决运行在3.5上图片被压扁。
13>
登录按钮图片拉伸(按钮尺寸:300
*
40)
1>
拉伸图片中间1个像素点。
2>
通过storyboard只能拉伸UIImageView
3> storyboard中
x:表示左侧多少不拉伸
y:表示上边多少不拉伸
w:表示宽度拉伸多少个像素
h:表示高度拉伸多少个像素
x:0.5(左侧1半不拉伸)
y:0.5(顶部1半不拉伸)
w:0
(宽度拉伸1个像素) h:0(高度拉伸1个像素)
4>
拉伸按钮,必须通过代码。
5>
自定义登录控制器loginController
6> UIImage抽分类resizableImageWithName
14>
我的彩票(右上角设置按钮的色彩和返回按钮的色彩默许是蓝色,需要设置为白色)
1>
利用程序所有导航条上的UIBarButton都需要设置白色的。
2> UIBarButton在导航条上,所以我们设置导航条的主题色彩就行了。
3>
获得全部利用程序的外观设置主题色彩
UINavigationBar setTintColor(主题色彩)
3>
只需要设置1次,并且跟导航控制器有关系,在导航控制器里的initialize里设置,并且之前在导航控制器拿到了全部利用程序的导航条
15>
设置ios6上利用程序所有导航条上的按钮背景
1>
导航条白色主题只有在ios7才需要设置。
2>
设置导航条上的UIBarButton背景,只有在ios6才需要设置
3> UIBarButton由UIBarButtonItem决定。
4>
获得全部利用程序的UIBarButtonItem,设置全部利用程序的UIBarButton。避免1个控制器1个控制器的设置
5> UIBarButtonItem setBackgroundImage
//
设置按钮背景
6> UIBarButtonItem setBackButtonBackgroundImage
//
设置返回按钮背景
/*
彩票第2天
*/
1>
搭建设置界面分析
1>
静态单元格:1个cell1个cell的改,太麻烦,而且不灵活
------分隔线----------------------------
------分隔线----------------------------