记得IT连创业刚进行时,招了个IOS的女生作开发,而后:html
----------女生的事故就此开始了-----------git
1:面试时候:有做品,态度也不错,感受应该能作点事。github
2:刚招进来:发现天天都在看文章,但迟迟不见有点东西。面试
3:过程问答:如今在整些什么?回答在搭框架。网络
4:发现危机:不当心看到她用单手指敲键盘,感受不妙。架构
5:处理危机:速学IOS,一个星期后,看完她代码,谈话Over!app
----------女生的事故就到此结束了----------框架
在速学IOS时,快速扫了很多培训的视频教程,发现套路都是很原始。工具
这些原始的套路了解能够,但若这些过来搬到项目来,就祸害无穷了。布局
按照当时创业的成本考虑,很大几率招来的人是如下三种:
1: 刚从培训班出来的;
2:刚看完培训视频过来;
3:刚用培训视频的套路祸害完一个项目后跳过来的。
为了对下一个开发人员有所约束:
让一个有3-4年开发经验的朋友帮忙整一下框架。
看完他整的框架,发现只是常规性的工具类分文件夹。
给他提了一个要求,把其中一个网络请求从新封装一下。
回头再看,虽有所改进,但仍是不尽我意。
也许能够指导继续改进,但时不以我,也不以他。
因而本身动手了:框架大致完成60%时,招了个男开发人员。
----------男生的事故就此开始了-----------
为了赶项目,让新人在框架的基础上动工了。
鉴于新人开发人员能弄点东西,加上有框架的辅助,就撒手了。
因为框架的不完善,以及对框架的不理解,遇到点小坑就吐槽。
吐槽多了,也只能赞成他混着其它的框架一块儿整了。
再后来,多的数不清的坑和闪退事故。
早期关注IT连及用IT连App的童学,就清楚了。
或者在我以前的IT连创业系列文章里应该能够感知了。
如今,他也Over了!
----------男生的事故就到此结束了-----------
从新接手回IOS后,发现代码逻辑也是一团槽,好在以前有一部份仍是按框架走。
最近花了一周多的时候,理解,并开始重构整个项目的代码。
同时对框架以前已有的依赖关系也进行了抽离,并从新重构了一下框架。
目前对框架的重构的工做已经进行了70%-80%,还有一些功能想了还没加上。
但总体并不影响基础功能,因此是时候把Sagit的框架和大伙分享了!
自从:CYQ.Data 框架这名字被大伙吐槽以后,后续的框架命名,就显的格外用心了。
在研究了行星、星座、水果、植物、动物、颜色、形状等英文名称以后。
终于有了:白羊(Areis.DevFramework For DotNet)、
再也有了:金牛(Taurus.MVC For DotNet)
以后没了:双子(Gemini.workflow For DotNet) 工做流引擎目前难产中(写了开头,后来没空折腾)。
所以,凑齐黄金十二宫,召换雅典娜,就成了我来地球最神秘的任务了!
此次越级选了:Sagittarius (射手)
一来是ST的前缀简写恰好对应的如今创业公司的名字:随天。
二来取前半部作框架名,简写:Sagit(发音:射日,很和谐发现有木有)
A:工做几年以后,开发功能已不是问题,须要有点新思惟来突破受限的瓶颈。
看懂框架代码不难,主要是学习思惟,多思考,并多训练本身怎么写。
B:对于在培训行业的教师,能够在培训结束前用框架的思惟引导一下新人,再放他们出来。
A:开发人员没有框架的概念。
B:目前没有其它可选择的框架。
通常的说,除了游戏,其它常规性的项目都适合。
下面对框架进行简单的介绍,也只能是简单介绍:
A:框架默认以IPhone6的像素为标准参考体系:750*1334。
B:开发时,都以标准的像素单位为参数。
C:运行时,会自动适配成对应比例的参数。
(PS :若是须要修改标准,可在STDefineUI.h文件中修改定义)
看着UI给的参数标注图,轻松布局:
以上图片为例,作布局
A:相对父元素的布局 Logo:
[[[[self addImageView:@"login_logo"] width:170 height:170] relate:Top v:288] toCenter:X];
B:相对固定元素的布局,下面这行代码是引用其它地方的:
[[[[self addImageView:@"icon_verify"] width:48 height:48] onBottom:pwdIcon y:26] toCenter:X];
如下这行代码,会对批定的视图的子视图从新进一次相对布局。
[self refleshLayout];
记得很早之前,我写过一篇文章:Objective-C iOS纯代码布局 一堆代码能够放这里!
那时候只是研究的前奏,并无实现完整分离,固然如今是解决了。
举个例如:一个文本框一个按钮,点击按钮弹出文字框的内容。
以前的作法,你都会在Controller里写一堆UI相关的建立方法,或者须要将某些UI定义为全局变量,以便后续再去获取UI的值。
最差也是我以前未完成时留下的那点手尾:(下面红色的,在Controller中须要定义一个具体的LoginView变量)
LoginView 的代码:建立了一个文本框和一个点击按钮
@interface LoginView : STView //这是LoginView.h @end @implementation LoginView //这是LoginView.m -(void)initUI { [[self addTextField:@"userName" placeholder:@"输入手机号"] x:0 y:0 width:100 height:100]; [[self addButton:@"btnLogin" title:@"登陆"] onRight:self.lastSubView.PreView x:10]; } @end
LoginController 的代码:有一个按钮事件,获取手机号用户名而后弹出来提示
@interface LoginController : STController // 这是LoginController.h @end @implementation LoginController //这是LoginController.m -(void)btnLoginClick { NSString* userName=[self uiValue:@"userName"]; [self.box prompt:userName]; }
self.window.rootViewController = [LoginController new];
LoginView和LoginController两个文件代码里,并无互相引用的地方。
可是UI和事件却补神奇的关联起来了,这是怎么作到的呢?
秘密就在STView和STController文件的源码中。
若是你须要提交一个表单的数据,你只须要这样:
-(void)btnLoginClick { // NSString* userName=[self uiValue:@"userName"]; // [self.box prompt:userName]; [self.http post:@"/Login" paras:self.formData success:^(STModel *result) { if(result.success)//若是:提交成功 { [self.stView loadData:result.msg];//将返回的数据回显到控件 } }]; }
解析:
self.formData能够自动收集UI表单的内容。
self.stView loadData 能够自动将字典的数据写回UI中。
一切就是这么Easy,在这种常规的提交中,批量来批量去,不须要有Model的存在。
这里暂就不提供Demo了,后续文章再跟进。
UITextField *userName= [[[self addTextField:@"UserName" placeholder:@"手机号码"] width:372 height:68] onRight:mobileIcon x:30 y:-10]; [[userName maxLength:11] keyboardType:UIKeyboardTypeNumberPad];
不用再去这样写的憔碎了:
mobileTF.keyboardType = UIKeyboardTypeNumberPad;// UIKeyboardTypeNamePhonePad; mobileTF.MaxLength=11;// = (id)self.Controller;
OC的命名老是很长,作为了一名C#的大神,有义务把C#简洁的语法带过来。
例如:
@interface NSString(ST) -(NSString*)reverse; -(BOOL)isInt; -(BOOL)isFloat; -(NSString*)append:(NSString*)string; -(NSString*)replace:(NSString*)a with:(NSString*)b; -(NSString *)replace:(NSString *)a with:(NSString *)b isCase:(BOOL)isCase; -(NSArray<NSString*>*)split:(NSString*)separator; -(NSString*)toUpper; -(NSString*)toLower; -(BOOL)startWith:(NSString*)value; -(BOOL)endWith:(NSString*)value; -(BOOL)contains:(NSString*)value; -(BOOL)contains:(NSString*)value isCase:(BOOL)isCase; -(BOOL)isEmpty; +(BOOL)isNilOrEmpty:(NSString*)value; +(NSString*)toString:(id)value; -(NSString*)trim;
1:网络的请求只有三个:
[self.http get ...] [self.http post ...] [self.http upload ...]
2:消息提示框:
[self.box prompt...]
[self.box alert..]
[self.box confirm...]
其它等。。。就不在这里介绍了,后续会慢慢写文介绍。
GitHub:https://github.com/cyq1162/Sagit
目前以源码方式提供,并未打包成类库。
新开的:IOS Sagit框架 :QQ群:702724292
1 :框架刚开源,预示着在将来的日子里,升级与变更是少不了的。
2:框架只是个基础,完整的项目架构,还须要根据不一样的业务搭配不一样的第三方类库。
3:后续会将IT连和IT恋两个App的源码,作为示例教程,和大伙分享。
4:最后,依然感谢大伙关注我正在进行的IT连创业项目!