您的位置:首页 > 移动开发 > Swift

通过Xcode自带LaunchScreen布局文件自定义启动动画

2016-07-09 11:41 417 查看
大晚上刷微博,刷到一篇转发自 里脊串 的博客 Tips:获取APP的Launch
Image

大致内容是:通过获取打包到 
App
 里的启动图,初始化一个 
UIImageView
 与屏幕同等大小再加载到 
UIWindow
 上来做启动延时,从而达到自定义启动动画的目的。代码里的各种 
Key
 没太看懂,放到工程里也没法显示效果。文中的意思是不要增加启动图的方式来适配,那我想了想 
iOS
 启动画面的方式目前我所知就两种:启动图和布局文件。我现在基本上没有用图片作为启动图,都是直接用布局文件搞定。

PS:今年开发的 
App
 基本上都是支持 
iOS7
 以上了,所以没太用启动图了, 
Xcode
6
 是 
LaunchScreen.xib
 ,到 
Xcode
7
 变成了 
LaunchScreen.storyboard
 ,无可厚非,两者本质都是一样的。

教程看的云里雾里的,不过不打紧,思路还是一样的,我想如果 
Storyboard
 和
Size
Class
 玩得多同学还是喜欢布局文件作为启动图的方式吧,所以我的方式是获取 
LaunchScreen.storyboard
 里的 
ViewController
 ,在把 
View
 提取出来加到 
UIWindow
 显示做动画即可。

这种方式的好处就是,获取大小就是屏幕的大小,而且只要你把不同屏幕的布局搞定了,系统会帮你生成好加在的启动页,这样就免去了判断和从新设置大小的麻烦,这样才是真适配嘛~

废话不多说,上代码吧~

(对了,记得给 
LaunchScreen.storyboard
 里的 
ViewController
 设置好
Storyboard
ID
 )

UIViewController *viewController = [[UIStoryboard storyboardWithName:@"LaunchScreen" bundle:nil] instantiateViewControllerWithIdentifier:@"LaunchScreen"];

UIView *launchView = viewController.view;
AppDelegate *delegate = [UIApplication sharedApplication].delegate;
UIWindow *mainWindow = delegate.window;
[mainWindow addSubview:launchView];

[UIView animateWithDuration:2.0f delay:0.0f options:UIViewAnimationOptionBeginFromCurrentState animations:^{
launchView.alpha = 0.0f;
launchView.layer.transform = CATransform3DScale(CATransform3DIdentity, 1.3f, 1.3f, 1.0f);
} completion:^(BOOL finished) {
[launchView removeFromSuperview];
}];


此代码片段,如果应用启动初始化如果是代码可以在AppDelegate加,Storyboard加载方式需要加在ViewController里。



2015.11.27

最近项目UI框架切换到 
UITabBarController
 ,发现这个动画没法使用,是由于如果在 
Storyboard
 中使用 
UITabBarController
 ,如果做启动登录需求,肯定是按需加载,就需要自建继承自 
UITabBarController
 的关联,如果在 
-
(void)viewDidLoad
 里加载就会导致如下警告:

Warning: Attempt to present <HXLoginViewController: 0x7fa5a063cca0> on <HXMainViewController: 0x7fa5a05ae0b0> whose view is not in the window hierarchy!**


系统没法知道该怎么显示,所以只能放到 
- (void)viewDidAppear:(BOOL)animated
 里来做, 
UITabBarController
 框架加载这个动画没效果也是这个原因,但是没Debug警告,不过要注意,如果只是单纯使用这个动画没啥问题,但是如果在 
UITabBarController
 上用 
模态
 视图的方式做按需加载以及转场动画需要处理 
-
(void)viewDidAppear:(BOOL)animated
 重复调用的问题。

分享 
 
 

 收藏
  纠错





推荐文章

1. [iOS] BarcodeScanner:二维码扫描、识别控制组件

2. [iOS] WSTagsField:可定制、易用的标签文本框输入组件

3. 自己动手实现 Pokemon Go 锁区破解 —— 记一次重签名

4. iOS 狂霸酷炫拽之Button动效

5. [iOS] BentoMap:四叉树算法实现地图目标快速标记类库及演示

6. iOS-最全的App上架教程

相关推刊

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swift