开篇
最近换工作,刚到公司熟悉项目和代码风格等一系列东西,时间比较紧,简书有段时间没有更新,就趁今天有时间在家写点东西吧,下周又要开新的项目估计就要忙了。这里先说一下未来要写的内容和计划,今天可能先谈一下一些框架和代码风格以及布局原理的东西,下周在公司值班,陆续会补充一些商城APP中常用的一些框架和封装,以及一些比较常用的第三方,同时会介绍一下他们的用法,希望能够对做这一块的有所帮助,也能让自己对这个项目加深了解,在新项目的同时以后若是回头来更新也能更加得心应手。由于涉及到公司原因部分模块代码不会太多,但是对第三方会有详细介绍。因此文章会有一个系列希望喜欢的关注下,大神轻喷。
框架和风格
- 项目框架
框架和风格每个公司都有自己的特点,下面放一个这个项目的部分框架截图
部分框架截图
上图我们可以看到,主要的内容是在Classes中,里面的框架如下
Classes内容
而在Utils中方的则是一些常用的东西,比如是网络请求的封装等一些manager,以及动画封装,category和runtime等一些项目中常用到的代码封装。
再Vendor中放的则是一些自己公司封装的一些空间和一些没有用cocopods导入的第三方等。
- 代码风格
代码风格和框架一样,不同的团队都有着一套自己的方法和规范,这里放一份仅做参考吧。
项目中使用懒加载和masonry自动布局,为了便于维护和代码的可读性做了一下规范,有需要的可以看一下。
.h文件
#import <UIKit/UIKit.h>
@interface CodeStyleViewController : UIViewController
#pragma mark ###1,在此处编写要加入界面的控件
@property(nonatomic,strong) UIView * demo ;
@end
-(void)viewDidLoad{
[super viewDidLoad];
#pragma mark ###3,将控件添加到容器中
//将self.view实例添加到self.view中
[self.view addSubview:self.demo];
#pragma mark ###4,进行界面布局
//给view添加autolayout constraints
[self viewMakeMasConstraints];
#pragma mark ###5,进行网络或者本地数据加载
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];
}
-(void)didReceiveMemoryWarning{
[super didReceiveMemoryWarning];
}
//
#pragma mark - UITableViewDataSource UITableView数据源
#pragma mark - UITableViewDelegate UITableView代理方法
#pragma mark - CustomDelegate 自定义代理方法
#pragma mark - 网络请求,数据请求
#pragma mark - event response button、GestureRecognizer的响应事件
#pragma mark - private methods 自定义私有方法
#pragma mark - getters and setters 定义view实例的存取方法,view使用getter方法进行初始化
#pragma mark ###2,在此处进行控件和相关内容的初始化 懒加载
-(UIView *)demo{
if (_demo==nil) {
_demo=[UIView new];
}
return _demo;
}
#pragma mark - AutoLayout代码布局
#pragma mark ###4,进行界面布局:由上向下或者由下向上进行布局
/**
* 给vc中的view添加autolayout constraints
*/
-(void)viewMakeMasConstraints{
[self.demo makeConstraints:^(MASConstraintMaker* make){
make.top.equalTo(self.view);
make.bottom.equalTo(self.view);
make.left.equalTo(self.view);
make.right.equalTo(self.view);
}];
}
关于布局
关于商城页面其实布局上还是很有挑战的,因为你要展示的东西会比较多,那么关于这些控件你要安排它也就是一个比较重要的事情了,因为不同的想法可能会极大的增加自己的工作量。
商城
在商城类软件中此类布局算是比较常见的了。虽然控件较多,但是我们仔细分析下来,其实并不算是相当麻烦,导航栏上的控件我们不用多少。往下的话,就是一个滚动的广告栏,专柜特区以及一组图片,最下面则是一个网格视图。整个页面又是可以滚动的,那么我们就会想,如果我们把上面说的控件作为网格的头视图会不会好一点,于是我们找到了自己布局的思路。
我的交易界面
上面的界面虽然看着不如商城界面充满界面的感觉,但是如果我们不利用任何的第三方,那么关于他们之间的布局以及逻辑也值得我们好好的去思考。
我们根据枚举去区分我们点击是最上层的那个按钮,并改变他们的颜色,然后根据点击内容的不同决定第二行按钮和划线内容以及个数的不同,之后再根据选择去用列表展示。
布局有时候也许并不像想象的那么无解,至今记忆较深的就是一个朋友去面试,面试官跟他说的,程序员一开始可能是你的码代码的能力,但是真的到最后你会发现逻辑思维能力大于你单纯的代码能力,很多东西,逻辑出来了,去实现它也许难度并没有那么大。
后记
因为是第一篇大致就这些吧,下一篇会多说一些常用的能够简单的实现我们效果的控件的使用。