Latest 1.0
Homepage https://github.com/clayzhu/CZLaunchVC_iOS
License MIT
Platforms ios 8.0
Authors

CZLaunchVC_iOS

自定义启动画面,支持视频、多张图片左右滑动、单张图片倒计时。

1. 介绍

开发 iOS 应用过程中,经常会需要呈现一个不一样的启动画面。例如淘宝、京东等 App,都在启动画面中给用户介绍最新的活动。但是 iOS 项目框架默认提供的 Assets.xcassetsLaunchScreen.storyboard 都比较简单。

CZLaunchVC_iOS 提供4种启动画面的方式:

  • 视频播放
  • 多张图片滑动
  • 单张图片倒计时
  • GIF 图片播放

在上述方式的启动画面结束后,还提供了一个便捷的方法,使页面能平滑地过渡到主界面。

2. 安装

2.1 使用 CocoaPods

pod 'CZLaunchVC'

2.2 手动导入

下载 CZLaunchVC_iOS,将 /CZLaunchVC 文件夹拖入项目中,记得在 Destination: Copy items if needed 前面打勾。

3. 说明

/CZLaunchVC 文件夹下的 CZLaunchVC.hCZLaunchVC.m,是主要实现文件,其中包含三个类:

  • CZLaunchVC:启动画面功能实现类
  • CALayer+CZLaunchTransition:用于完成启动画面后,平滑过渡到主界面
  • UIImage+CZLaunchGIF:借助于 SDWebImage,实现 GIF 图转 UIImage 的功能

3.1 CZLaunchVC

3.1.1 使用视频播放的启动画面

/**
 使用视频播放的启动画面

 @param url 视频的 URL,可以为本地或远程的视频
 @param configBlock 如果要显示一个完成视频播放,点击执行 enterBlock 的按钮,则实现这个 configBlock;设置为 nil,则不显示按钮,等待播放完毕后自动执行 enterBlock
 @param enterBlock 点击完成按钮或播放完毕后,执行的功能,一般为设置 window.rootViewController
 */
- (void)launchWithMovieURL:(NSURL *)url
                    config:(void (^)(UIButton *enterButton))configBlock
                     enter:(void (^)(void))enterBlock;

3.1.2 使用多张图片滑动展示的启动画面

/**
 使用多张图片滑动展示的启动画面

 @param images 图片数组
 @param configEnterButtonBlock 如果要在最后一张图片上显示一个完成图片展示,点击执行 enterBlock 的按钮,则实现这个 configEnterButtonBlock;设置为 nil,则不显示按钮,滑动到最后一张图片,再向左滑时,自动执行 enterBlock
 @param configPageControlBlock 如果要显示一个指示当前滑动到的图片位置的 UIPageControl,则实现这个 configPageControlBlock;设置为 nil,则不显示
 @param enterBlock 点击完成按钮或滑动完毕后,执行的功能,一般为设置 window.rootViewController
 */
- (void)launchWithImages:(NSArray<UIImage *> *)images
       configEnterButton:(void (^)(UIButton *enterButton))configEnterButtonBlock
       configPageControl:(void (^)(UIPageControl *pageControl))configPageControlBlock
                   enter:(void (^)(void))enterBlock;

3.1.3 使用单张图片倒计时展示的启动画面

/**
 使用单张图片倒计时展示的启动画面

 @param image 图片
 @param duration 启动画面的展示时长
 @param configBlock 如果要显示一个显示倒计时,点击执行 enterBlock 的按钮,则实现这个 configBlock;设置为 nil,则不显示按钮,等待倒计时完毕后自动执行 enterBlock
 @param enterBlock 点击完成按钮或倒计时完毕后,执行的功能,一般为设置 window.rootViewController
 */
- (void)launchWithImage:(UIImage *)image
               duration:(NSUInteger)duration
                 config:(void (^)(UIButton *enterButton))configBlock
                  enter:(void (^)(void))enterBlock;

3.1.4 使用 GIF 图片的启动画面

/**
 使用 GIF 图片的启动画面

 @param name GIF 图片名称。“.gif”后缀可传可不传
 @param repeatCount GIF 图片重复次数
 @param configBlock 如果要显示一个完成 GIF 图片动画,点击执行 enterBlock 的按钮,则实现这个 configBlock;设置为 nil,则不显示按钮,等待播放完毕后自动执行 enterBlock
 @param enterBlock 点击完成按钮或 GIF 图片动画完毕后,执行的功能,一般为设置 window.rootViewController
 */
- (void)launchWithGIFNamed:(NSString *)name
               repeatCount:(NSUInteger)repeatCount
                    config:(void (^)(UIButton *enterButton))configBlock
                     enter:(void (^)(void))enterBlock;

3.2 CALayer+CZLaunchTransition

/**
 给 CALayer 增加过渡动画

 @param type 过渡动画类型,包括:kCATransitionFade, kCATransitionMoveIn, kCATransitionPush, kCATransitionReveal(另有一些私有 API,比如:rippleEffect, suckEffect 等)
 @param subtype 过渡动画方向,包括:kCATransitionFromRight, kCATransitionFromLeft, kCATransitionFromTop, kCATransitionFromBottom
 @param timingFunctionName 动画速率函数名称,包括:kCAMediaTimingFunctionLinear, kCAMediaTimingFunctionEaseIn, kCAMediaTimingFunctionEaseOut, kCAMediaTimingFunctionEaseInEaseOut, kCAMediaTimingFunctionDefault
 @param duration 动画时长
 */
- (void)transitionWithType:(NSString *)type
                   subtype:(NSString *)subtype
        timingFunctionName:(NSString *)timingFunctionName
                  duration:(CGFloat)duration;

3.3 UIImage+CZLaunchGIF

/**
 通过 GIF 文件名称解析出一张包含每一帧图片的动画图片

 @param name GIF 图片名称。“.gif”后缀可传可不传
 @return 一张包含 GIF 每一帧图片的动画图片
 */
+ (UIImage *)sd_animatedGIFNamed:(NSString *)name;

4. 示例

  1. 在项目的 TARGETS 中,删除 Main Interface,关闭 Xcode 默认配置的 rootViewController

  2. AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中,重新设置 App 的 window

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
  3. 导入头文件:#import "CZLaunchVC.h",根据项目需要设置相应类型的启动画面。下面给出示例代码:

    3.1 使用视频播放的启动画面

    CZLaunchVC *vc = [[CZLaunchVC alloc] init];
    // 视频 URL
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"Hotel California_ Short - The Eagles" withExtension:@"mp4"];   // 本地视频 URL
    //  NSURL *url = [NSURL URLWithString:@"http://omployphm.bkt.clouddn.com/Hotel%20California_%20Short%20-%20The%20Eagles.mp4"];  // 远程视频 URL
    [vc launchWithMovieURL:url
                    config:^(UIButton *enterButton) {
                        enterButton.frame = CGRectMake(0.0, 0.0, 100.0, 30.0);
                        enterButton.center = CGPointMake(CGRectGetWidth([UIScreen mainScreen].bounds) / 2.0, CGRectGetHeight([UIScreen mainScreen].bounds) - 100.0);
                        [enterButton setTitle:@"立即体验" forState:UIControlStateNormal];
                        [enterButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
                    }
                     enter:^{
                         // 应用首页
                         ViewController *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ViewController"];
                         self.window.rootViewController = vc;
                         // 显示新的 rootViewController 时的过渡动画
                         [self.window.layer transitionWithType:kCATransitionFade subtype:kCATransitionFromTop timingFunctionName:kCAMediaTimingFunctionEaseInEaseOut duration:2.0];
                     }];
    self.window.rootViewController = vc;

    3.2 使用多张图片滑动展示的启动画面

    CZLaunchVC *vc = [[CZLaunchVC alloc] init];
    [vc launchWithImages:@[[UIImage imageNamed:@"launch0"],
                           [UIImage imageNamed:@"launch1"],
                           [UIImage imageNamed:@"launch2"]]
       configEnterButton:^(UIButton *enterButton) {
           enterButton.frame = CGRectMake(0.0, 0.0, 100.0, 30.0);
           enterButton.center = CGPointMake(CGRectGetWidth([UIScreen mainScreen].bounds) / 2.0, CGRectGetHeight([UIScreen mainScreen].bounds) - 100.0);
           [enterButton setTitle:@"立即体验" forState:UIControlStateNormal];
           [enterButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
       }
       configPageControl:^(UIPageControl *pageControl) {
           pageControl.center = CGPointMake(CGRectGetWidth([UIScreen mainScreen].bounds) / 2.0, CGRectGetHeight([UIScreen mainScreen].bounds) - 15.0 - 37.0 / 2.0);
           pageControl.hidesForSinglePage = YES;
       }
                   enter:^{
                       // 应用首页
                       ViewController *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ViewController"];
                       self.window.rootViewController = vc;
                       // 显示新的 rootViewController 时的过渡动画
                       [self.window.layer transitionWithType:kCATransitionFade subtype:kCATransitionFromTop timingFunctionName:kCAMediaTimingFunctionEaseInEaseOut duration:2.0];
                   }];
    self.window.rootViewController = vc;

    3.3 使用单张图片倒计时展示的启动画面

    CZLaunchVC *vc = [[CZLaunchVC alloc] init];
    [vc launchWithImage:[UIImage imageNamed:@"launch0"] duration:3
                 config:^(UIButton *enterButton) {
                     enterButton.frame = CGRectMake(0.0, 0.0, 100.0, 30.0);
                     enterButton.center = CGPointMake(CGRectGetWidth([UIScreen mainScreen].bounds) / 2.0, CGRectGetHeight([UIScreen mainScreen].bounds) - 100.0);
                     [enterButton setTitle:@"立即体验" forState:UIControlStateNormal];
                     [enterButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
                 }
                  enter:^{
                      // 应用首页
                      ViewController *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ViewController"];
                      self.window.rootViewController = vc;
                      // 显示新的 rootViewController 时的过渡动画
                      [self.window.layer transitionWithType:kCATransitionFade subtype:kCATransitionFromTop timingFunctionName:kCAMediaTimingFunctionEaseInEaseOut duration:2.0];
                  }];
    self.window.rootViewController = vc;

    3.4 使用 GIF 图片的启动画面

    CZLaunchVC *vc = [[CZLaunchVC alloc] init];
    [vc launchWithGIFNamed:@"Hotel-California_-Short-The-Eagles"
               repeatCount:2
                    config:^(UIButton *enterButton) {
                        enterButton.frame = CGRectMake(0.0, 0.0, 100.0, 30.0);
                        enterButton.center = CGPointMake(CGRectGetWidth([UIScreen mainScreen].bounds) / 2.0, CGRectGetHeight([UIScreen mainScreen].bounds) - 100.0);
                        [enterButton setTitle:@"立即体验" forState:UIControlStateNormal];
                        [enterButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
                    }
                     enter:^{
                         // 应用首页
                         ViewController *vc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"ViewController"];
                         self.window.rootViewController = vc;
                         // 显示新的 rootViewController 时的过渡动画
                         [self.window.layer transitionWithType:kCATransitionFade subtype:kCATransitionFromTop timingFunctionName:kCAMediaTimingFunctionEaseInEaseOut duration:2.0];
                     }];
    self.window.rootViewController = vc;

Latest podspec

{
    "name": "CZLaunchVC",
    "version": "1.0",
    "summary": "u81eau5b9au4e49u542fu52a8u753bu9762uff0cu652fu6301u89c6u9891u3001u591au5f20u56feu7247u5de6u53f3u6ed1u52a8u3001u5355u5f20u56feu7247u5012u8ba1u65f6u3002",
    "description": "u5f00u53d1 iOS u5e94u7528u8fc7u7a0bu4e2duff0cu7ecfu5e38u4f1au9700u8981u5448u73b0u4e00u4e2au4e0du4e00u6837u7684u542fu52a8u753bu9762u3002u4f8bu5982u6dd8u5b9du3001u4eacu4e1cu7b49 Appuff0cu90fdu5728u542fu52a8u753bu9762u4e2du7ed9u7528u6237u4ecbu7ecdu6700u65b0u7684u6d3bu52a8u3002u4f46u662f iOS u9879u76eeu6846u67b6u9ed8u8ba4u63d0u4f9bu7684 Assets.xcassets u6216 LaunchScreen.storyboard u90fdu6bd4u8f83u7b80u5355u3002nCZLaunchVC_iOS u63d0u4f9b4u79cdu542fu52a8u753bu9762u7684u65b9u5f0fuff1au89c6u9891u64adu653eu3001u591au5f20u56feu7247u6ed1u52a8u3001u5355u5f20u56feu7247u5012u8ba1u65f6u3001GIF u56feu7247u64adu653eu3002u5728u4e0au8ff0u65b9u5f0fu7684u542fu52a8u753bu9762u7ed3u675fu540euff0cu8fd8u63d0u4f9bu4e86u4e00u4e2au4fbfu6377u7684u65b9u6cd5uff0cu4f7fu9875u9762u80fdu5e73u6ed1u5730u8fc7u6e21u5230u4e3bu754cu9762u3002",
    "homepage": "https://github.com/clayzhu/CZLaunchVC_iOS",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "Clay Zhu": "[email protected]"
    },
    "platforms": {
        "ios": "8.0"
    },
    "source": {
        "git": "https://github.com/clayzhu/CZLaunchVC_iOS.git",
        "tag": "1.0"
    },
    "source_files": "CZLaunchVC/*.{h,m}"
}

Pin It on Pinterest

Share This