開篇
最近換工作,剛到公司熟悉項目和代碼風格等一系列東西,時間比較緊,簡書有段時間沒有更新,就趁今天有時間在家寫點東西吧,下周又要開新的項目估計就要忙了。這里先說一下未來要寫的內容和計劃,今天可能先談一下一些框架和代碼風格以及布局原理的東西,下周在公司值班,陸續會補充一些商城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);
}];
}
關于布局
關于商城頁面其實布局上還是很有挑戰的,因為你要展示的東西會比較多,那么關于這些控件你要安排它也就是一個比較重要的事情了,因為不同的想法可能會極大的增加自己的工作量。
商城
在商城類軟件中此類布局算是比較常見的了。雖然控件較多,但是我們仔細分析下來,其實并不算是相當麻煩,導航欄上的控件我們不用多少。往下的話,就是一個滾動的廣告欄,專柜特區以及一組圖片,最下面則是一個網格視圖。整個頁面又是可以滾動的,那么我們就會想,如果我們把上面說的控件作為網格的頭視圖會不會好一點,于是我們找到了自己布局的思路。
我的交易界面
上面的界面雖然看著不如商城界面充滿界面的感覺,但是如果我們不利用任何的第三方,那么關于他們之間的布局以及邏輯也值得我們好好的去思考。
我們根據枚舉去區分我們點擊是最上層的那個按鈕,并改變他們的顏色,然后根據點擊內容的不同決定第二行按鈕和劃線內容以及個數的不同,之后再根據選擇去用列表展示。
布局有時候也許并不像想象的那么無解,至今記憶較深的就是一個朋友去面試,面試官跟他說的,程序員一開始可能是你的碼代碼的能力,但是真的到最后你會發現邏輯思維能力大于你單純的代碼能力,很多東西,邏輯出來了,去實現它也許難度并沒有那么大。
后記
因為是第一篇大致就這些吧,下一篇會多說一些常用的能夠簡單的實現我們效果的控件的使用。