最近項目中要在啟動頁增加版本號,因為版本號是不斷的改變,所以要動態實現把它加到啟動頁上;在XCode上面配置的Launch Images Source或Launch Screen FIle(IOS8以上會優先調用這個作為啟動項)都是保存一張靜態圖片
其實原理也是很簡單,啟動頁還是運用Launch Images Source的內容,然后在做一個視圖在最上層,視圖的背景用啟動項的那張圖,讓人誤以為還在啟動中,啟動頁加載完成后,就顯示這層視圖,在2秒后再把這層視圖刪除,產生一個過度的假啟動頁效果;而我們自定義的動作就可以在這層視圖上進行
添加靜態啟動頁
1.打開assets文件,并點擊左下的+按鈕,添加LaunchImage。然后按要求,導入不同分辨率的圖片(把圖片從文件夾拖入到對應的框里,而且圖片格式要求為.png)。如下圖:
圖1 里導入的圖片都是透明的(一開始導入圖片的時候只導入了Retina 4.7的,系統會報一個警告,而且啟動頁不能正常顯示,把其余的幾種也導入之后警告才消失)
這里可選擇要導入屏幕的類別(系統版本、橫屏豎屏)
2.將launch images source修改為使用assets,然后設置一下為LaunchImage。
將launch screen file改為空
選中LaunchScreen.storyboard,然后這里也要修改一下。
按照上面的步驟可以設置一般的靜態啟動頁,如果要延長啟動頁的顯示時間,可以在application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中加入
[NSThread sleepForTimeInterval:5.0f];不過如果在第1步(圖1)導入的是透明的圖片,啟動頁的效果會是黑屏。
這個是為了下面的動畫(假啟動頁)做準備
把一張圖片導入到工程文件夾中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
//設置背景圖
UIImageView *welcome = [[UIImageView alloc]initWithFrame:self.window.bounds];
[welcome setImage:[UIImage imageNamed:@"welcome.png"]];
//把背景圖放在最上層
[self.window addSubview:welcome];
[self.window bringSubviewToFront:welcome];
welcome.alpha = 0.99;//這里alpha的值和下面alpha的值不能設置為相同的,否則動畫相當于瞬間執行完,啟動頁之后動畫瞬間消失。這里alpha設為0.99,動畫就不會有一閃而過的效果,而是一種類似于靜態背景的效果。設為0,動畫就相當于是淡入的效果了。
[UIView animateWithDuration:3.0f delay:0.0f options:UIViewAnimationOptionTransitionNone animations:^{
? ? ? ? ? ? ? ?welcome.alpha = 1;
? ? ? } completion:^(BOOL finished) {
? ? ? ? ? ? ? ?[welcome removeFromSuperview]; ?
}];
return YES;
}
添加版本號以及封裝
welcome.h
#import@interface welcome : UIView
+ (instancetype)startView;
- (instancetype) initWithBgImage:(UIImage *)bgImage;
- (void) startAnimation;
@end
welcome.m
#import "welcome.h"
@interface welcome()
@property (strong , nonatomic)? UIImageView *bgImageView;
@property (strong , nonatomic)? UILabel *lab;
@end
@implementation welcome
+ (instancetype)startView{
UIImage *splash = [UIImage imageNamed:@"welcome.png"];
return [[self alloc] initWithBgImage:splash];
}
- (instancetype) initWithBgImage:(UIImage *)bgImage{
if (self= [super initWithFrame:[UIApplication sharedApplication].keyWindow.bounds]) {
_bgImageView = [[UIImageView alloc]initWithFrame:[UIApplication sharedApplication].keyWindow.bounds];
_bgImageView.image = bgImage;
[self addSubview:_bgImageView];
_lab = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 170, 29)];
_lab.font = [UIFont systemFontOfSize:15];
_lab.textColor = [UIColor blackColor];
_lab.textAlignment = NSTextAlignmentCenter;
//_lab.alpha = 1;
_lab.text = @"版本號1.0";//這里可設置為根據版本不同做動態更改
[self addSubview:_lab];
}
return self;
}
- (void) startAnimation{
[[UIApplication sharedApplication].keyWindow addSubview:self];
[[UIApplication sharedApplication].keyWindow bringSubviewToFront:self];
_bgImageView.alpha = 0.99f;
_lab.alpha = 0.99f;
//? ? [self.window addSubview:self];
//? ? [self.window bringSubviewToFront:self];
[UIView animateWithDuration:3.0f delay:0.0f options:UIViewAnimationOptionTransitionNone animations:^{
_bgImageView.alpha = 1;
_lab.alpha = 1;
} completion:^(BOOL finished) {
[self removeFromSuperview];
}];
}
@end
AppDelegate.m
@implementation AppDelegate
UIImageView *splashView;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
welcome *welc = [welcome startView];
[welc startAnimation];
return YES;
}
參考鏈接: