SDLaunch:一個雜七雜八,卻功能完整的廣告引導(dǎo)頁


前言


在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ù)變少問題.
占位圖設(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)注騷棟騷棟將會給你們帶來更有趣的編程...??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,094評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評論 19 139
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 14,162評論 1 92
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,405評論 4 61
  • 早上語文老師說,必達很高興。 還說,必達說有點可惜,數(shù)學(xué)如果考得更好些就可以吃牛排了。 有這種不滿足,不管是出于什...
    躲進小樓看燈火閱讀 349評論 0 0

友情鏈接更多精彩內(nèi)容