iOS啟動圖和開屏廣告圖脱盲,類似網(wǎng)易

啟動圖是在iOS開發(fā)過程中必不可少的一個部分,很多app在啟動圖之后會有一張自定義的開屏廣告圖每界,點擊該廣告圖可以跳轉到廣告圖對應的頁面捅僵。今天呢,和大家分享一下如何添加這張廣告圖以及點擊廣告圖的跳轉眨层。這個廣告圖是通過將UIImageView添加到UIWindow上實現(xiàn)的庙楚。

一.添加本地啟動圖

1.準備好本地圖片
2.找到工程中的Images.xcassets文件,打開LaunchImage,將圖片拖到對應的地方趴樱,如下圖:

添加啟動圖

3.將LaunchScreen.storyboard文件中右邊的Use as Launch Screen選項關閉(不要選擇此項)如圖:
關閉Use as Launch Screen選項

4.將Launch Images Source選擇為LaunchImage ,再將Launch Screen File置空馒闷。如圖:
屏幕快照 2016-08-30 下午8.29.49.png

5.可在Appdelegate中設置啟動圖停留的時間

//        啟動頁停留1秒
        [NSThread sleepForTimeInterval:1];

6.運行工程可看到設置的啟動圖(如果沒有,可將app先刪除叁征,然后重新運行一次即可)

二.添加開屏廣告圖

這個廣告圖的實現(xiàn)是基于作者周煥強App啟動加載廣告頁面思路纳账,然后自己增加了一些小補充。因為廣告是有時效性的捺疼,不是每次啟動的時候都會去顯示這個廣告頁面疏虫。所以這里的原則是,后臺返回的數(shù)據(jù)中包括廣告圖片啤呼、廣告圖片對應的URL议薪、以及該廣告的截止時間。運行程序時會請求廣告圖數(shù)據(jù)媳友,將數(shù)據(jù)保存到本地斯议。再次運行時從本地中將保存的圖片取出,同時判斷圖片的截止日期是否有效醇锚,若圖片存在且在有效期內哼御,則將廣告圖顯示出來坯临;再次請求廣告圖數(shù)據(jù),以免有新的廣告數(shù)據(jù)恋昼。

1.創(chuàng)建自定義的SplashScreenView看靠。我在將ImageView加到Window上時,遇到添加不成功的情況液肌,后面打印window的時候發(fā)現(xiàn)挟炬,window的hidden屬性是YES,于是將其設為NO后就成功了。

- (void)showSplashScreenWithTime:(NSInteger )ADShowTime;

/** 廣告圖的顯示時間*/
@property (nonatomic, assign) NSInteger ADShowTime;

/** 圖片路徑*/
@property (nonatomic, copy) NSString *imgFilePath;

/** 圖片對應的url地址*/
@property (nonatomic, copy) NSString *imgLinkUrl;

/** 廣告圖的有效時間*/
@property (nonatomic, copy) NSString *imgDeadline;

2.實現(xiàn)顯示廣告頁的方法,這里會根據(jù)保存下來的廣告圖截止時間和是否有該圖片去顯示嗦哆。比較日期的先后谤祖,可以先將當前日期和保存下來的廣告圖轉換成相同的日期格式,將兩者進行比較老速,根據(jù)比較結果的 升序或降序來判斷日期的先后粥喜。

- (void)showSplashScreenWithTime:(NSInteger)ADShowTime
{
    _ADShowTime = ADShowTime;
    [_countButton setTitle:[NSString stringWithFormat:@"跳過%ld",ADShowTime] forState:UIControlStateNormal];
//
 
    NSDateFormatter *dataFormatter = [[NSDateFormatter alloc] init];
    dataFormatter.dateFormat = @"MM/dd/yyyy HH:mm";
    
   
    //獲取當前系統(tǒng)的時間,并用相應的格式轉換
    [dataFormatter stringFromDate:[NSDate date]];
    NSString *currentDayStr = [dataFormatter stringFromDate:[NSDate date]];
    NSDate *currentDate = [dataFormatter dateFromString:currentDayStr];
    
    //廣告截止的時間橘券,也用相同的格式去轉換
    NSString * timeStampString = self.imgDeadline;
    
    //時間戳的日期格式轉換方法
//    NSTimeInterval _interval=[timeStampString doubleValue] / 1000.0;
//    NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval];
//    NSString *deadlineStr = [dataFormatter stringFromDate:date];
//    NSDate *dateA = [dataFormatter dateFromString:deadlineStr];
//     NSDate *deadlineDate = [dataFormatter dateFromString:_imgDeadline];
    
    
    NSDate *deadlineDate = [dataFormatter dateFromString:_imgDeadline];
    NSLog(@"當前日期:%@ 存下的截止日期:%@", currentDayStr, timeStampString);
    NSComparisonResult result;
    result = [deadlineDate compare:currentDate];
    /**
     *  將存下來的日期和當前日期相比额湘,如果當前日期小于存下來的時間,則可以顯示廣告頁旁舰,反之則不顯示
     */
    if (result == NSOrderedAscending) {
        
        [self dismiss];
 
    }else{
 
        [self startTimer];
        UIWindow *window = [[UIApplication sharedApplication].delegate window];
        
        window.hidden = NO;
        
        [window addSubview:self];
    }

}

3.請求廣告數(shù)據(jù)锋华。請求數(shù)據(jù)時,先判斷該圖片是否存在箭窜,如果不存在的話毯焕,先將舊的圖片刪除掉,然后去下載新的圖片绽快。刪除就照片的時候需要注意芥丧,先去判斷保存下來的圖片名字和本地沙盒中存在的圖片是否一致紧阔,如果不一致坊罢,說明圖片有更新,此時刪除沙盒中的舊圖片擅耽,如果一致活孩,則不需要進行刪除操作,否則找不到已保存的圖片

+ (void)getAdvertisingImageData
{
    NSArray *imageArray = @[@"http://img1.126.net/channel6/2016/022471/0805/2.jpg?dpi=6401136", @"http://image.woshipm.com/wp-files/2016/08/555670852352118156.jpg"];
    NSString *imageUrl = imageArray[0];
    
   NSString  *imgLinkUrl = @"http://www.reibang.com/users/e4c63b354a77/latest_articles";
    
   NSString  *imgDeadline =  @"08/30/2016 14:25";
    
                
                // 獲取圖片名
                NSArray *stringArr = [imageUrl componentsSeparatedByString:@"/"];
                NSString *imageName = stringArr.lastObject;
                
                // 拼接沙盒路徑
                NSString *filePath = [self getFilePathWithImageName:imageName];
                BOOL isExist = [self isFileExistWithFilePath:filePath];
                
                
                if (!isExist){// 如果該圖片不存在乖仇,則刪除老圖片憾儒,下載新圖片
                    
                    [self downloadAdImageWithUrl:imageUrl imageName:imageName imgLinkUrl:imgLinkUrl imgDeadline:imgDeadline];
                    
                }
                
  
}

/**
 *  下載新的圖片
 */
+ (void)downloadAdImageWithUrl:(NSString *)imageUrl imageName:(NSString *)imageName imgLinkUrl:(NSString *)imgLinkUrl imgDeadline:(NSString *)imgDeadline
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:imageUrl]];
        UIImage *image = [UIImage imageWithData:data];
        
        
        NSString *filePath = [self getFilePathWithImageName:imageName]; // 保存文件的名稱
        [UIImageJPEGRepresentation(image, 0) writeToFile:filePath atomically:YES];
        if ([UIImageJPEGRepresentation(image, 0) writeToFile:filePath atomically:YES]) {
            
            // 保存成功
            //判斷保存下來的圖片名字和本地沙盒中存在的圖片是否一致,如果不一致乃沙,說明圖片有更新起趾,此時先刪除沙盒中的舊圖片,如果一致說明是刪除緩存后再次下載警儒,這時不需要進行刪除操作训裆,否則找不到已保存的圖片
            if (![imageName isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:adImageName] ]) {
                [self deleteOldImage];
            }
          
            [[NSUserDefaults standardUserDefaults] setValue:imageName forKey:adImageName];
            [[NSUserDefaults standardUserDefaults] setValue:imgLinkUrl forKey:adUrl];
            [[NSUserDefaults standardUserDefaults] setValue:imgDeadline forKey:adDeadline];
            [[NSUserDefaults standardUserDefaults] synchronize];
            
        }else{
            NSLog(@"保存失敗");
        }
        
    });
}

/**
 *  刪除舊圖片
 */
+ (void)deleteOldImage
{
    NSString *imageName = [[NSUserDefaults standardUserDefaults] valueForKey:adImageName];
    
    if (imageName) {
        
        NSString *filePath = [self getFilePathWithImageName:imageName];
        
        NSFileManager *fileManager = [NSFileManager defaultManager];
        [fileManager removeItemAtPath:filePath error:nil];
        [[NSUserDefaults standardUserDefaults] setValue:@"" forKey:adImageName];
        [[NSUserDefaults standardUserDefaults] setValue:@"" forKey:adUrl];
        [[NSUserDefaults standardUserDefaults] setValue:@"" forKey:adDeadline];
        [[NSUserDefaults standardUserDefaults] synchronize];
        
    }
    
}

最后的效果如圖:

啟動圖和開屏廣告圖.gif

demo地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末眶根,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子边琉,更是在濱河造成了極大的恐慌属百,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件变姨,死亡現(xiàn)場離奇詭異族扰,居然都是意外死亡,警方通過查閱死者的電腦和手機定欧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門渔呵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忧额,你說我怎么就攤上這事厘肮。” “怎么了睦番?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵类茂,是天一觀的道長。 經(jīng)常有香客問我托嚣,道長巩检,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任示启,我火速辦了婚禮兢哭,結果婚禮上,老公的妹妹穿的比我還像新娘夫嗓。我一直安慰自己迟螺,他們只是感情好,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布舍咖。 她就那樣靜靜地躺著矩父,像睡著了一般。 火紅的嫁衣襯著肌膚如雪排霉。 梳的紋絲不亂的頭發(fā)上窍株,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天,我揣著相機與錄音攻柠,去河邊找鬼球订。 笑死,一個胖子當著我的面吹牛瑰钮,可吹牛的內容都是我干的冒滩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼浪谴,長吁一口氣:“原來是場噩夢啊……” “哼开睡!你這毒婦竟也來了祈搜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤士八,失蹤者是張志新(化名)和其女友劉穎容燕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婚度,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蘸秘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝗茁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片醋虏。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖哮翘,靈堂內的尸體忽然破棺而出颈嚼,到底是詐尸還是另有隱情,我是刑警寧澤饭寺,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布阻课,位于F島的核電站,受9級特大地震影響艰匙,放射性物質發(fā)生泄漏限煞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一员凝、第九天 我趴在偏房一處隱蔽的房頂上張望署驻。 院中可真熱鬧,春花似錦健霹、人聲如沸旺上。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宣吱。三九已至,卻和暖如春阶捆,著一層夾襖步出監(jiān)牢的瞬間凌节,已是汗流浹背钦听。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工洒试, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朴上。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓垒棋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親痪宰。 傳聞我的和親對象是個殘疾皇子叼架,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,497評論 25 707
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫畔裕、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,022評論 4 62
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理乖订,服務發(fā)現(xiàn)扮饶,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 今天在公司與同事進行一場分享,主題是關於「價值觀」哥遮,重點在於引導同事們認識現(xiàn)階段自我價值觀並且與內心所希望我們公...
    愛芮閱讀 163評論 0 1
  • 換上白襯衫岂丘,帶上紅領結,我們在進行比賽前的最后一次大合唱眠饮! 既然選擇了上場奥帘,便只顧風雨兼程,候場ing 當那一刻來...
    覺今是而昨非閱讀 331評論 0 0