記得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連創業項目!