
前言
在App中的廣告頁面比較常見,新手導(dǎo)引更是不用說,基本上每一個應(yīng)用都必備一個新手導(dǎo)引.雖然現(xiàn)在封裝的三方比較多,但是騷棟還是想自己造造輪子,SDLaunch是一個具有多種頁面類型的引導(dǎo)頁.其中包括,廣告頁面類型、 新手導(dǎo)引類型 ** 、 GIF背景頁面類型、滾動圖背景頁面類型**四種形式,基本上能滿足所有的引導(dǎo)頁需求.下面我們就看一下SDLunch的使用規(guī)范.
SDLaunch使用說明
SDLaunch三方的主體是SDLaunchViewController,SDLaunchViewController是一個繼承于UIViewController的類,這個類使用到了SDWebImage這個三方,如果項目中已經(jīng)導(dǎo)入SDWebImage,請刪除SDLunch的SDWebImage.
SDLaunchWebViewController是用于廣告頁面加載的一個控制器.控制器是以模態(tài)視圖形式展示的.
SDLunch是需要在AppDelegate中代碼指定根視圖控制器的,這是需要注意的一點.
????????注意:如果同時加載本地圖片數(shù)組和服務(wù)器圖片數(shù)組,本地圖片將不會生效.建議使用本地圖片~因為服務(wù)器圖片可能會造成卡頓,使用戶體驗效果下降.
</b>
SDLaunchViewController基礎(chǔ)屬性和方法
SDLaunchViewController一共有兩個基礎(chǔ)方法和一個公共屬性.如下代碼所示.其中,兩個基礎(chǔ)方法一個是用于初始化SDLaunchViewController對象,并且制定頁面類型.一個是用于跳轉(zhuǎn)頁面.公共屬性是endButton,只要頁面類型不是ADLaunchViewController,其他類型默認都是有這個按鈕,所以聲明屬性,方便使用者調(diào)用.
/**
初始化SDLaunchViewController
*/
-(instancetype)initWithMainVC:(UIViewController *)mainVC viewControllerType:(LaunchViewControllerType )viewControllerType;
/**
跳轉(zhuǎn)到App的根視圖控制器
*/
-(void)skipAppRootMainViewController;
/**
結(jié)束導(dǎo)引按鈕,只要頁面類型不是ADLaunchViewController,其他類型都有這個按鈕,所以要拿出來.
*/
@property(nonatomic,strong)UIButton *endButton;
SDLaunchViewController的類型有四個,我們需要在初始化的時候就指定SDLaunchViewController的類型,類型是一個枚舉值,具體如下所示.接下來我們會對每一種頁面類型所對應(yīng)的屬性進行說明.
typedef enum {
ADLaunchViewController,//廣告類型
GreenhandLaunchViewController,//輪播圖新手導(dǎo)引類型
GifBackgroundLaunchViewController,//gif圖背景類型
RollImageLaunchViewController//滾動圖片類型
} LaunchViewControllerType;
廣告類型的SDLaunch
上面說到了SDLaunchViewController的基本屬性和方法,下面我們就說說如何在工程中使用SDLaunchViewController,首先我們需要把Demo中的SDLaunch這個文件夾導(dǎo)入工程.然后,我們就需要在AppDelegate中初始化我們的SDLaunchViewController,設(shè)置頁面類型為ADLaunchViewController.由于廣告頁面大多數(shù)是動態(tài)的,所以我們需要指定廣告圖片的URL以及廣告頁面的URL,最后指定為根式圖控制器.具體代碼如下所示.
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
SDLaunchViewController *vc = [[SDLaunchViewController alloc]initWithMainVC:[[ViewController alloc]init] viewControllerType:ADLaunchViewController];
vc.imageURL = @"http://pic.qiantucdn.com/58pic/17/80/57/94s58PICA7j_1024.jpg";
vc.adURL = @"http://www.itdecent.cn/users/e39da354ce50/latest_articles";
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
效果圖如下所示.

ADLaunchViewController類型所對應(yīng)的其他屬性如下所示,我們可以根據(jù)自己的需求定制特殊的廣告頁面.
/**
廣告頁面標題
*/
@property(nonatomic,strong)NSString *titleString;
/**
廣告頁面是否允許跳過,默認可以點擊跳過
*/
@property(nonatomic,assign)BOOL isSkip;
??????注意廣告類型的SDLaunch如果加載的是服務(wù)器廣告圖片可能有延遲,所以占位圖要設(shè)置為引導(dǎo)圖的圖片,這樣用戶體驗就提高了,但是第一次使用可能會出現(xiàn)倒計秒數(shù)變少問題.

新手導(dǎo)引類型的SDLaunch
新手導(dǎo)引類型的SDLaunch主要用于首次進入App使用,類型枚舉值為GreenhandLaunchViewController,其中新手導(dǎo)引我們初始化步驟和廣告類型的步驟相同,但是我們需要傳入的圖片是一個數(shù)組類型,如果是本地的圖片,我們傳入的是圖片名稱數(shù)組(imageNameArray),如果是服務(wù)器端圖片,我們傳入的是圖片的URL字符串數(shù)組(imageURLArray).這里有一點需要注意的是當兩者同時傳入的時候,默認的是使用服務(wù)器端的圖片URL數(shù)組.具體示例代碼如下所示.
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
SDLaunchViewController *vc = [[SDLaunchViewController alloc]initWithMainVC:[[ViewController alloc]init] viewControllerType:GreenhandLaunchViewController];
vc.imageNameArray = @[@"新手指導(dǎo)1",@"新手指導(dǎo)2"];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
效果圖如下所示.

當然了,新手導(dǎo)引也是有對應(yīng)的額外屬性的,比如對endButton(進入應(yīng)用控制器按鈕)和pageControl(頁面標記),我們都可以進行專屬定制.
GIF背景類型的SDLaunch
有很多的時候,我們需要定制一個動態(tài)圖背景的頁面,這不單單是在引導(dǎo)頁所需要的,SDLaunch的GifBackgroundLaunchViewController類型就是用來完成這一任務(wù)的.這一類型中我們需要指定GIF圖片的本地名稱或者是圖片的URL地址.同時這一個類型聲明了frontGifView(半透明狀)這一個屬性用于往頁面上添加各種控件.比如我們創(chuàng)建一個GIF動圖的引導(dǎo)頁面,我們可以往frontGifView上面添加一些必要的信息,示例代碼如下所示.
注意:gifImageName屬性賦值的時候,不需要帶有.gif后綴.
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
SDLaunchViewController *vc = [[SDLaunchViewController alloc]initWithMainVC:[[ViewController alloc]init] viewControllerType:GifBackgroundLaunchViewController];
//不需要加.gif后綴
vc.gifImageName = @"動圖";
//網(wǎng)絡(luò)gif圖片URL
vc.gifImageURL = @"http://image76.360doc.com/DownloadImg/2014/07/1510/43430258_28";
//往頁面上添加數(shù)據(jù)
UILabel *titleLable = [[UILabel alloc]initWithFrame:CGRectMake(0, 100,[UIScreen mainScreen].bounds.size.width , 60)];
titleLable.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
titleLable.textColor = [UIColor whiteColor];
titleLable.textAlignment = NSTextAlignmentCenter;
titleLable.text = @"不 積 跬 步 無 以 至 千 里";
[vc.frontGifView addSubview:titleLable];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
效果圖如下所示.

滾動圖片類型的SDLaunch
現(xiàn)在的App中有很多頁面的背景圖片都是一張滾動的圖片,SDLaunch的RollImageLaunchViewController類型就是滾動的圖片類型,其中我們要做的也是需要指定圖片的本地名稱或者是圖片的URL地址.這里我們就拿啟動圖為示例,具體代碼如下所示.
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
SDLaunchViewController *vc = [[SDLaunchViewController alloc]initWithMainVC:[[ViewController alloc]init] viewControllerType:RollImageLaunchViewController];
vc.rollImageName = @"滾動圖片.jpeg";
//往頁面上添加數(shù)據(jù)
UILabel *titleLable = [[UILabel alloc]initWithFrame:CGRectMake(0, 100,[UIScreen mainScreen].bounds.size.width , 60)];
titleLable.font = [UIFont fontWithName:@"Helvetica-Bold" size:20];
titleLable.textColor = [UIColor whiteColor];
titleLable.textAlignment = NSTextAlignmentCenter;
titleLable.text = @"不 積 跬 步 無 以 至 千 里";
[vc.frontRollView addSubview:titleLable];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
效果圖如下所示.(效果圖可能會卡頓,因為圖片大小問題只能設(shè)置30FPS,所以有些卡頓)

滾動圖片類型的SDLaunch核心代碼講解
其他三個類型的核心代碼相對比較簡單,滾動圖片類型的核心方式就是實現(xiàn)滾動圖片,騷棟是使用一個定時器加上改變imageView的frame來實現(xiàn)的,整體的實現(xiàn)部分主要在rollImageAction這個方法中實現(xiàn)的.在這個方法中,我們需要先判斷x的坐標是否超過最大允許范圍,如果超過,那么就改變isReverse這個布爾值,也就是改變調(diào)用方法.在反向方法中也是如此.具體代碼如下所示.
int rollX = 0;
bool isReverse = NO;//是否反向翻滾
-(void)rollImageAction{
if (rollX-1 >(SDMainScreenBounds.size.width-SDMainScreenBounds.size.height* _rollImage.size.width/_rollImage.size.height) &&!isReverse) {
rollX = rollX-1;
_rollImageView.frame = CGRectMake(rollX, 0,SDMainScreenBounds.size.height* _rollImage.size.width/_rollImage.size.height, SDMainScreenBounds.size.height);
}else{
isReverse = YES;
}
if (rollX+1 < 0 &&isReverse) {
rollX = rollX +1;
_rollImageView.frame = CGRectMake(rollX, 0,SDMainScreenBounds.size.height* _rollImage.size.width/_rollImage.size.height, SDMainScreenBounds.size.height);
}else{
isReverse = NO;
}
}
當然了,在此之前,我們需要對圖片的寬高比進行判斷,因為圖片是橫向移動,縱向不移動且占滿全屏.所以如果圖片寬度大于高度的話,那么效果是不可能實現(xiàn)的,我們需要做一下判斷.整體是在addRollImageAndTimer中實現(xiàn)的,對于網(wǎng)絡(luò)圖片和本地圖片調(diào)取該方法的時機是不同的,因為網(wǎng)絡(luò)加載是有延遲的.
-(void)addRollImageAndTimer{
if (_rollImage !=nil && _rollImage.size.height>_rollImage.size.width) {
NSLog(@"Error:滾動圖片的高度比寬度高,不能進行橫向滾動!");
}else{
_rollImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0,SDMainScreenBounds.size.height* _rollImage.size.width/_rollImage.size.height, SDMainScreenBounds.size.height)];
_rollImageView.image = _rollImage;
self.rollTimer =[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(rollImageAction) userInfo:nil repeats:YES];
[self.view addSubview:_rollImageView];
if (!_hideEndButton) {
[self.frontRollView addSubview:self.endButton];
_endButton.tintColor = [UIColor blueColor];
}
[self.view addSubview:self.frontRollView];
[self.rollTimer fire];
}
SDLaunchDemo使用方式
-->SDLaunchDemo的傳送門??
所有的演示對象都是在AppDelegate的didFinishLaunchingWithOptions這個方法中實現(xiàn)的.需要那一部分只要打開注釋即可.



結(jié)束
SDLunch這個輪字的相關(guān)使用就介紹到這,如果有疑問,可以聯(lián)系騷棟進行探討...謝謝.歡迎關(guān)注騷棟騷棟將會給你們帶來更有趣的編程...??
