Git Product home page Git Product logo

launchscreenanimation-storyboard's Introduction

通过LaunchScreen自定义启动动画

大晚上刷微博,刷到一篇转发自里脊串的博客Tips:获取APP的Launch Image

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

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

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

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

废话不多说,上代码吧~ (对了,记得给LaunchScreen.storyboard里的ViewController设置好Storyboard ID

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

UIView *launchView = viewController.view;
UIWindow *mainWindow = [UIApplication sharedApplication].keyWindow;
launchView.frame = [UIApplication sharedApplication].keyWindow.frame;
[mainWindow addSubview:launchView];

[UIView animateWithDuration:0.6f delay:0.5f options:UIViewAnimationOptionBeginFromCurrentState animations:^{
    launchView.alpha = 0.0f;
    launchView.layer.transform = CATransform3DScale(CATransform3DIdentity, 1.5f, 1.5f, 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重复调用的问题。


2016.03.28 最近看到很多人留言没效果,其实稍微调试一下就知道,不是没效果,是时机出了问题,之前的效果应该在9.1之前能看到,新的系统版本应该改了时机,这里的技巧无非就是在以下三个时机处理:

- (void)viewDidLoad;
- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidAppear:(BOOL)animated;

经过了测试在viewDidLoadviewWillAppear:加这个效果都是出现视图层级的问题,这是由于控制器生成的视图直接盖在了启动页上,层级在其之上当然无法显示。

按照之前的方式在viewDidLoad或者viewWillAppear实际的效果是这样:

所以现在想要看到效果,就只能在最后一个时机viewDidAppear:里加入示例代码了。

Demo:https://github.com/shicang1990/LaunchScreenAnimation-Storyboard

launchscreenanimation-storyboard's People

Contributors

rockerhx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.