第二篇教程之前寫了一半,感覺不太好寫,而且內容單純介紹API,要說的很多,又枯燥乏味。所以那半篇文章就放下了。後來又開始思考這教程該怎麼寫,經過幾天的沉澱,終於有了一個決定:這個教程,就用IT戀里的實例來和大伙分享了,看看在實戰是怎麼被應用的。 ...
前言:
開篇比較簡單:Sagit.Framework For IOS 開發框架入門開發教程1:框架下載與環境配置
第二篇教程之前寫了一半,感覺不太好寫,而且內容單純介紹API,要說的很多,又枯燥乏味。
所以那半篇文章就放下了。
後來又開始思考這教程該怎麼寫,經過幾天的沉澱,終於有了一個決定:
這個教程,就用IT戀里的實例來和大伙分享了,看看在實戰是怎麼被應用的。
這篇文章分兩部分,前面講實戰的應用,後面補充框架設計原理,及未來設想的擴展等。
Sagit 實現引導頁功能:
1:首先,我們要有N張引導頁的圖片
IT戀里就放有3張了,如下(這裡圖片把翻頁的效果直接帶上了,我們就省點事了):
2:然後,邏輯與代碼:
邏輯流程:
AppDelegate啟動時=》檢測如果是第一次啟動App=》WelcomeController(歡迎引導頁)
if([ITGlobal share].IsFirstRun) { //歡迎界面 self.window.rootViewController = [WelcomeController new]; } else if (launchOptions) {}
滑動顯示三張圖片之後,最後一張觸發點擊事件,根據條件進入以下界面:
A:(更新App時)存在Token,跳轉到:MainController(主界面)
B:(第一次時)無Token時,跳轉到:StartController(登陸註冊引導界面)
然後就是核心的一行代碼實現功能了,一切都來的這麼簡單輕鬆:
[[self.view addScrollView:nil direction:X imgName:@"welcome_1", @"welcome_2", @"welcome_3", nil].lastSubView click:name];
Sagit 框架原理解說:
1:Controller載入View的原理:
在往上看的第一張圖中,註意細節:
A:可以看到引導歡迎界面,只有一個WelcomeController,木有WelcomeView。
B:而引導註冊界面,有和StartController對應的StartView。
這個功能是我這兩天增加的,主要是考慮到當View里的代碼極少時,節省文件的同時,也更簡潔。
所以,目前Controller檢測載入View的流程是:
@implementation STController - (void)viewDidLoad { [super viewDidLoad];//獲取當前的類名 NSString* className= NSStringFromClass([self class]); NSString* viewClassName=[className replace:@"Controller" with:@"View"]; Class viewClass=NSClassFromString(viewClassName); if(viewClass!=nil)//view { self.view=self.stView=[[viewClass alloc] initWithController:self]; [self.stView initView]; } else { self.view=[[STView alloc] initWithController:self];//將view換成STView [self initUI]; } } //空方法(保留給子類覆蓋) -(void)initUI{}
代碼讀下來是這樣的:
1: 如果XXXController檢測到存在XXXView,則進行載入,並調用其initView方法(裡面會再調用initUI方法)
--所以框架的預設載入的約定的是XXX名字首碼一樣,就會被載入。
2: 如果檢測不存在,則調用自身的initUI方法(這就是這裡單獨一個WelcomeController存在的原因)。
2:UIView的AddUI相關的方法。
框架擴展了UIView,增了常用了組件方法,並對這些組件,進行了些特殊的處理:
-(void)addView:(UIView *)view name:(NSString*)name; -(UIView*)addUIView:(NSString*)name; -(UIButton*)addSwitch:(NSString*)name; -(UIButton *)addStepper:(NSString *)name; -(UIButton *)addSlider:(NSString *)name; -(UIButton *)addProgress:(NSString *)name; -(UILabel*)addLabel:(NSString*)name; -(UILabel*)addLabel:(NSString*)name text:(NSString*)text; -(UILabel*)addLabel:(NSString*)name text:(NSString*)text font:(NSInteger)px; -(UIImageView*)addImageView:(NSString*)name; -(UIImageView*)addImageView:(NSString*)name imgName:(NSString*)imgName; -(UIImageView*)addImageView:(NSString*)name imgName:(NSString*)imgName xyFlag:(XYFlag)xyFlag; -(UITextField*)addTextField:(NSString*)name; -(UITextField*)addTextField:(NSString*)name placeholder:(NSString*)placeholder; -(UITextView*)addTextView:(NSString*)name; -(UIButton*)addButton:(NSString*)name; -(UIButton*)addButton:(NSString*)name imgName:(NSString*)imgName; -(UIButton*)addButton:(NSString*)name imgName:(NSString*)imgName buttonType:(UIButtonType)buttonType; -(UIButton*)addButton:(NSString*)name title:(NSString*)title; -(UIButton*)addButton:(NSString*)name title:(NSString*)title font:(NSInteger)px; -(UIButton*)addButton:(NSString*)name title:(NSString*)title font:(NSInteger)px buttonType:(UIButtonType)buttonType; -(UIButton*)addButton:(NSString*)name title:(NSString*)title font:(NSInteger)px imgName:(NSString*)imgName buttonType:(UIButtonType)buttonType; -(UIView*)addLine:name color:(id)colorOrHex; -(UIScrollView*)addScrollView:(NSString*)name; -(UIScrollView *)addScrollView:(NSString*)name direction:(XYFlag)direction imgName:(NSString*)imgName,...NS_REQUIRES_NIL_TERMINATION;
有些組件目前還沒涉及,後續根據項目情況可能會追加或進一步優化。
這裡先講一下addScrollView的基礎用法:
-(UIScrollView *)addScrollView:(NSString*)name direction:(XYFlag)direction imgName:(NSString*)imgName,...NS_REQUIRES_NIL_TERMINATION;
核心講解:
1:每個UI都有個name屬性,這個name很核心,可以關聯事件,用於尋找UI,也用於對UI取值賦值,如果實在沒用到,可以賦nil。 2:XYFlag 指求滑動是左右的X,還是上下的Y。 3:可以指定一個可追加的圖片名稱,用於載入圖片(內部載入時,會自動根據數據調整ScrollView和圖片的寬高等屬性)。 4:對於一個add的UIView,沒指定xy寬高時,會自動繼承上一個相對視圖的frame屬性,這裡是繼承父視圖,全屏了。
3:事件的觸發
AddScrollView只是追加了圖片,並可以滑動,但我們需要對最後一張圖片增加點擊事件:
所以需要先拿到最後一張圖片,框架對UIView擴展了四個屬性:
-(UIView*)lastSubView; -(UIView*)firstSubView; -(UIView*)preView; -(UIView*)nextView;
用於方便拿到子視圖的第一個和最後一個,以及自己同級的上一個和下一個。
接著,是對這個UIView,追加點擊事件。
框架對於UIView擴展了兩種點擊事件的綁定方式:
#pragma mark 擴展系統事件 -(UIView*)click:(NSString*)event; - (UIView*)addClick:(onClick)block;
click用於指定一個事件的名稱,addClick用於追加一個事件執行的代碼塊。
這裡先講click傳的event名字的尋找事件的流程:
1:先找傳進來的event在所在的Controller中是否有對應的事件,若有,執行,若沒有繼續以下: 2:對event追加尾碼變成eventClick和eventClick:再看有沒有對應的事件,若有,執行,若沒有繼續以下: 3:對event追加尾碼變成EventController,看有沒有對應的控制器,若有,執行預設的open:事件跳轉,若沒有,則無綁定事件。
OK,原理講解到這裡,大伙再重溫一下這行代碼:
[[self.view addScrollView:nil direction:X imgName:@"welcome_1", @"welcome_2", @"welcome_3", nil].lastSubView click:name];
總結:
這些天一直在改進框架,相信隨著框架的不斷完善,可以讓大伙編寫IOS代碼時,變的輕鬆很多!!!
下一篇,我們以跳轉到登陸註冊引導頁為示例,繼續下一篇教程。
最後,謝謝大伙對Sagit框架和本人IT連創業項目的關註!