IOS使用Launch Screen.storyboard製作廣告啟動介面

weixin_30639719發表於2020-04-05

最近專案在做的廣告sdk,剛好自己需要去了解這個實現啟動圖載入廣告這個功能,大家應該都瞭解,之前Xcode 6是LaunchScreen.xib來當作啟動檢視,不過到了Xcode 7就變成了Launch Screen.storyboard,其實這兩個沒有多大的區別,以下我就採用Xcode 7提供的LaunchScreen.storyboard 來實現這個功能,現在把自己經驗和程式碼分享出來。

主要思路

獲取Launch Screen.storyboard

通過使用storyborardID去獲取啟動檢視viewcontroller

獲取啟動viewController的檢視view

之後把檢視view新增到window中

最後就是新建一個圖片貼在檢視view中

做個定時觸發處理

廢話不多說啦,直接貼程式碼出來:

AppDelegate.m中的程式碼

//獲取LaunchScreen.storyborad

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Launch Screen" bundle:nil];

//通過使用storyborardID去獲取啟動頁viewcontroller

UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"LaunchScreen"];

//獲取viewController的檢視

self.view = viewController.view;

//把檢視新增到window

[self.window addSubview:self.view];

self.launchView = [[UIImageView alloc] initWithFrame:self.window.frame];

[self.launchView setImage:[UIImage imageNamed:@"launch.jpg"]];//這邊圖片可以做網路請求載入圖片、視訊動畫或者其他自定義的引導頁

[self.view addSubview:self.launchView];

//將圖片檢視推送到前面

[self.window bringSubviewToFront:self.launchView];

//設定3秒定時觸發

[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(colseLaunchScreen) userInfo:nil repeats:NO];

- (void)colseLaunchScreen {

if (self.launchView) {

[self.launchView removeFromSuperview];

self.launchView = nil;

}

if (self.view) {

[self.view removeFromSuperview];

self.view = nil;

}

}

這邊也可以結合LaunchImage使用,方式也是差不多,這邊就不多講了

注意有個坑已填平了:之前我用的xcode專案中General中Main Interface 啟動專案初始化的主介面storyboard,用以上方法一直看不到載入的廣告,後面使用在AppDelegate程式碼方式去載入storyboard,就可以載入出來了,目前不清楚這個是什麼問題,待研究發現,如有發現朋友,方便留言告知下,謝啦(後面經過友友們的指出,發現如果不是用程式碼載入storyboard,那General->Main Interface->的main.storyboard載入會新建window,跟你之前傳入的window不是同一個,這個之前的就被覆蓋了,導致看不到廣告效果,之後我修改了方案,把window改成用window中viewController中view這要就避免程式碼載入stroyboard了)

這裡注意一下,上面這個使用storyboard啟動適用ios8.0以上,但現在應用差不多都是ios7.0起,開發者為了方便適配,大多都採用launchImage啟動,這種也可以使用storyboard去獲取廣告,完全沒有問題,但在載入初始化廣告肯定會消耗一點點時間這要就會出現短暫storyboard的預設頁面,這個可以通過把獲取rootview先隱藏,等載入完畢廣告再顯示出來!這要問題解決了!

如果先獲取launchImage的圖片可以採用Cherpak Evgeny 分享在stackflow上的一個直接讀取NSBundle中的設定 即可獲取當前適用的LaunchImage的辦法,程式碼我也貼出來:

CGSize viewSize =self.window.bounds.size;

NSString *viewOrientation =@"Portrait";//橫屏請設定成 @"Landscape"

NSString *launchImage =nil;

NSArray *imagesDict = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"UILaunchImages"];

for(NSDictionary* dict in imagesDict) {

CGSize imageSize =CGSizeFromString(dict[@"UILaunchImageSize"]);

if(CGSizeEqualToSize(imageSize, viewSize) && [viewOrientation isEqualToString:dict[@"UILaunchImageOrientation"]]) {

launchImage = dict[@"UILaunchImageName"];

}

}

UIImageView *launchView = [[UIImageView alloc] initWithImage:[UIImageimageNamed:launchImage]];

launchView.frame=self.window.bounds;

launchView.contentMode=UIViewContentModeScaleAspectFill;

[self.window addSubview:launchView];

[UIView animateWithDuration:2.0f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState

animations:^{

launchView.alpha=0.0f;

launchView.layer.transform=CATransform3DScale(CATransform3DIdentity,1.2,1.2,1);

}

completion:^(BOOL finished) {

[launchView removeFromSuperview];

}];

轉載於:https://www.cnblogs.com/CJH5209/p/6027451.html

相關文章