最近遇到了兩個開屏圖開發(fā)的小小問題。記錄下來,方便自己以后查看回顧,也方便可能會遇到的朋友。
1.開屏圖必須按機型放置對應(yīng)尺寸的LaunchImage
因為在launchImage展示期間會獲取屏幕分辨率,所以錯誤的尺寸會導致獲取屏幕分辨率錯誤,從而導致所有字體變大/播放器獲取寬高錯誤等問題。所以如果遇到類似問題,代碼層面沒有問題的時候,可以查看launchImage的尺寸是否有錯誤。
2.弱網(wǎng)環(huán)境下開屏廣告展示在首頁出現(xiàn)之后
開屏廣告通常是一張?zhí)砑釉趙indow上的imageView,弱網(wǎng)環(huán)境下因為圖片下載慢就有可能出現(xiàn)開屏廣告展示在首頁出現(xiàn)之后的情況。
這種情況下,可以把LauncImage作為背景圖建一個viewcontroller,先用這個viewcontroller作為首頁,廣告展示完成后再替換為真正的首頁。這種情況下一定要注意亮點
·避免因廣告圖片下載不成功導致卡死在LaunchImage,所以出了要在圖片下載完成展示的回調(diào)中更改首頁,還要設(shè)置一個超時時間,超過某個時間就要強制進入首頁。
·如果app的首頁是禁止橫屏的,那要注意這個LauncImage作為背景圖的viewcontrolle也要禁止橫屏,否則在啟動的時候橫置手機,首頁就會橫屏顯示,如果沒有適配,就會導致UI錯亂。
LaunchViewController.m
@implementation YSLaunchViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIImageView *lauchImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, YSAppScreenWidth, YSAppScreenHeight)];
lauchImage.image = [UIImage imageNamed:@"home_launch"];
[self.view addSubview:lauchImage];
}
// 如果沒有設(shè)置整個app禁止橫屏,一定要在這里設(shè)置改VC禁止橫屏,否則進入首頁會導致首頁橫屏
- (BOOL)shouldAutorotate{
return NO;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskPortrait;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
// 可以通過發(fā)送通知或者其他方式更改rootViewController
[[NSNotificationCenter defaultCenter] postNotificationName:@"NeedChangeHomePage" object:nil];
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// 在didFinishLaunchingWithOptions中接收更改rootViewController的通知(已省略其他無關(guān)代碼)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showHomePage:) name:@"NeedChangeHomePage" object:nil];
// 設(shè)置rootViewController為LaunchImage
LaunchViewController *lauchVC = [[LaunchViewController alloc] init]; // LaunchImage為背景的VC
self.window.rootViewController = lauchVC;
return YES;
}
-(void)showHomePage:(NSNotification *)notifa {
// 如果rootViewController不是首頁,進行替換
if (![self.window.rootViewController isKindOfClass:[MainViewController class]]) {
self.window.rootViewController = [[MainViewController alloc] init];
}
}