最近遇到了兩個開屏圖開發(fā)的小小問題咳焚。記錄下來,方便自己以后查看回顧窜管,也方便可能會遇到的朋友列赎。
1.開屏圖必須按機型放置對應(yīng)尺寸的LaunchImage
因為在launchImage展示期間會獲取屏幕分辨率,所以錯誤的尺寸會導(dǎo)致獲取屏幕分辨率錯誤,從而導(dǎo)致所有字體變大/播放器獲取寬高錯誤等問題。所以如果遇到類似問題,代碼層面沒有問題的時候柱搜,可以查看launchImage的尺寸是否有錯誤。
2.弱網(wǎng)環(huán)境下開屏廣告展示在首頁出現(xiàn)之后
開屏廣告通常是一張?zhí)砑釉趙indow上的imageView漠酿,弱網(wǎng)環(huán)境下因為圖片下載慢就有可能出現(xiàn)開屏廣告展示在首頁出現(xiàn)之后的情況冯凹。
這種情況下,可以把LauncImage作為背景圖建一個viewcontroller炒嘲,先用這個viewcontroller作為首頁宇姚,廣告展示完成后再替換為真正的首頁。這種情況下一定要注意亮點
·避免因廣告圖片下載不成功導(dǎo)致卡死在LaunchImage夫凸,所以出了要在圖片下載完成展示的回調(diào)中更改首頁浑劳,還要設(shè)置一個超時時間,超過某個時間就要強制進入首頁夭拌。
·如果app的首頁是禁止橫屏的魔熏,那要注意這個LauncImage作為背景圖的viewcontrolle也要禁止橫屏衷咽,否則在啟動的時候橫置手機,首頁就會橫屏顯示蒜绽,如果沒有適配镶骗,就會導(dǎo)致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禁止橫屏鼎姊,否則進入首頁會導(dǎo)致首頁橫屏
- (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];
}
}