ios 一行代码实现iOS项目启动页, 包括加载网络视频, 本地视频, 网络图片, 本地图片

一行代码实现iOS项目启动页, 包括加载网络视频, 本地视频, 网络图片, 本地图片

github下载地址:https://github.com/ZHHalsey/AppStart(感觉有用可以点个star)

可以设置倒计时

使用方法很简单

导入写好的类ZHMoviePlayerController, 创建一个对象, 然后根据项目需求调用下面的两个对象方法(分加载视频跟加载图片,可以是网络的也可以是本地的)

image

如果加载的时候, 如果只加载网络图片不加载本地图片的话,本地图片参数传入为nil就可以,加载视频同理

这里展示的demo没加缓存, 我自己做的项目中加了缓存了,提供下思路在这里:

加缓存的话, 写入沙盒, 设置一个userdefault, 启动的时候先去沙盒找, 如果沙盒有的话就加载沙盒的, 沙盒没有的话就加载网络的, 然后把需要加载的启动页写入沙盒就行

demo展示放不了视频, 所以就放几张图片, 供大家参考

下面这个是视频启动页,可以点击按钮进入应用, 也可以设置几秒倒计时自动进入

image

下面这个是加载图片启动页, 这里是用的倒计时的加载

image

贴上源码:

#import "ViewController.h"

@interface ZHMoviePlayerController : ViewController

/**
 *  @param movieURL 网上url视频
 *  @param localMovieName 本地视频
 */
- (void)setMoviePlayerInIndexWithURL:(NSURL *)movieURL localMovieName:(NSString *)localMovieName;

/**
 *  @param imageURL 网上url图片
 *  @param localImageName 本地图片
 *  @param timeCount 倒计时时间
 */

- (void)setImageInIndexWithURL:(NSURL *)imageURL localImageName:(NSString *)localImageName timeCount:(int)timeCount;

@end
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width


#import "ZHMoviePlayerController.h"
#import <AVFoundation/AVFoundation.h>
#import <AVKit/AVKit.h>
#import "ViewController.h"

@interface ZHMoviePlayerController ()

@property (nonatomic, strong)AVPlayerViewController *AVPlayer;
@property (nonatomic, strong)UIButton *enterMainButton;
@property (nonatomic, assign) int timeCount;
@property (nonatomic, weak)NSTimer *timer;
@property (nonatomic, weak)NSTimer *timer1;


@end

@implementation ZHMoviePlayerController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor orangeColor];
}

- (void)setMoviePlayerInIndexWithURL:(NSURL *)movieURL localMovieName:(NSString *)localMovieName
{
    self.AVPlayer = [[AVPlayerViewController alloc]init];
    // 取消多分屏功能
    self.AVPlayer.allowsPictureInPicturePlayback = NO;
    self.AVPlayer.showsPlaybackControls = false;
    AVPlayerItem *item;
    if (movieURL) {
        NSLog(@"传入了网络视频url过来");
        item = [[AVPlayerItem alloc]initWithURL:movieURL];
    }else if (localMovieName) {
        NSLog(@"加载的是本地的视频");
        NSString *path =  [[NSBundle mainBundle] pathForResource:@"movie.mp4" ofType:nil];
        NSLog(@"path---%@", path);
        item = [[AVPlayerItem alloc]initWithURL:[NSURL fileURLWithPath:path]];
    }
    AVPlayer *player = [AVPlayer playerWithPlayerItem:item];
    // layer
    AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:player];
    [layer setFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
    // 填充模式
//    layer.videoGravity = AVLayerVideoGravityResizeAspect; // 保持视频的纵横比
    layer.videoGravity = AVLayerVideoGravityResize; // 填充整个屏幕
    self.AVPlayer.player = player;
    [self.view.layer addSublayer:layer];
    [self.AVPlayer.player play];
    
    // 重复播放。
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playDidEnd:)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:item];
//    [self createLoginBtn]; // 3秒后自动就停止(这里自行选择)
    [self createLoginBtn1]; // 不点的话 就一直播放视频
    
}

- (void)setImageInIndexWithURL:(NSURL *)imageURL localImageName:(NSString *)localImageName timeCount:(int)timeCount{
    
    _timeCount = timeCount;
    // http://fimg.yucuizhubao.com/img/start.png
    UIImageView *imagev1 = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
    if (imageURL) {
        NSLog(@"加载的是网络上的图片");
        NSData *data = [NSData dataWithContentsOfURL:imageURL];
        UIImage *image1 = [UIImage imageWithData:data];
        imagev1.image = image1;
        
    }
    if (localImageName) {
        NSLog(@"加载的是本地的图片");
        UIImage *image = [UIImage imageNamed:@"bj.png"];
        imagev1.image = image;
    }
    
    [self.view addSubview:imagev1];
    [self createLoginBtn];
}

// 播放完成代理
- (void)playDidEnd:(NSNotification *)Notification{
    // 重新播放
    [self.AVPlayer.player seekToTime:CMTimeMake(0, 1)];
    [self.AVPlayer.player play];
}

// 用户不用点击, 几秒后自动进入程序
- (void)createLoginBtn
{
    // 进入按钮
    _enterMainButton = [[UIButton alloc] init];
    _enterMainButton.frame = CGRectMake(SCREEN_WIDTH - 90, 50, 60, 30);
    _enterMainButton.backgroundColor = [UIColor grayColor];
    _enterMainButton.titleLabel.font = [UIFont systemFontOfSize:12];
    _enterMainButton.layer.cornerRadius = 15;
    NSString *title = [NSString stringWithFormat:@"跳过 %d", _timeCount];
    [_enterMainButton setTitle:title forState:UIControlStateNormal];
    _timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(DaoJiShi) userInfo:nil repeats:YES];
    [self.view addSubview:_enterMainButton];
    [_enterMainButton addTarget:self action:@selector(enterMainAction) forControlEvents:UIControlEventTouchUpInside];
}
// 倒计时
- (void)DaoJiShi{
    if (_timeCount > 0) {
        _timeCount -= 1;
        NSString *title = [NSString stringWithFormat:@"跳过 %d", _timeCount];
        [_enterMainButton setTitle:title forState:UIControlStateNormal];
    }else{
        [_timer invalidate];
        _timer = nil;
        [self enterMainAction];
    }
}

// 不会自动停止, 需要用户点击按钮才能进入应用
- (void)createLoginBtn1{ // 这里的时间是3秒后视频页面出现按钮
    _timer1 = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(showClickBtn) userInfo:nil repeats:YES];
}
- (void)showClickBtn{
    NSLog(@"显示进入应用按钮");
    UIButton *btn = [[UIButton alloc] init];
    btn.frame = CGRectMake(30, SCREEN_HEIGHT - 100, SCREEN_WIDTH - 60, 40);
    btn.backgroundColor = [UIColor redColor];
    btn.layer.cornerRadius = 20;
    btn.alpha = 0.5;
    [btn setTitle:@"进入应用" forState:UIControlStateNormal];
    [self.view addSubview:btn];
    [btn addTarget:self action:@selector(enterMainAction) forControlEvents:UIControlEventTouchUpInside];
    [_timer1 invalidate];
    _timer1 = nil;// timer置为nil

}
- (void)enterMainAction{
    NSLog(@"点击了进入应用按钮");
    ViewController *vc = [[ViewController alloc]init];
    self.view.window.rootViewController = vc;
    [self.AVPlayer.player pause];
}
@end

Appdelegate里的调用:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    // 这是图片还有视频的url链接
    NSString *getUrlStr = @"http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"; // 网络视频
//    NSString *getUrlStr = @"http://fimg.yucuizhubao.com/img/start.png"; // 网络图片
    
    NSLog(@"后缀是--%@", [getUrlStr substringFromIndex:[getUrlStr length] - 4]);
    ZHMoviePlayerController *ZHVC = [[ZHMoviePlayerController alloc]init];
    
    if ([[getUrlStr substringFromIndex:[getUrlStr length] - 4] isEqualToString:@".mp4"] ) {
        NSLog(@"加载的是视频");
//        [ZHVC setMoviePlayerInIndexWithURL:[NSURL URLWithString:getUrlStr] localMovieName:nil]; // 加载网络url视频
        [ZHVC setMoviePlayerInIndexWithURL:nil localMovieName:@"movie.mp4"]; // 加载本地视频
        self.window.rootViewController = ZHVC;
        
    }else if ([[getUrlStr substringFromIndex:[getUrlStr length] - 4] isEqualToString:@".png"]){
        NSLog(@"加载的是图片");
//        [ZHVC setImageInIndexWithURL:[NSURL URLWithString:getUrlStr] localImageName:nil timeCount:4];// 加载网络图片
        [ZHVC setImageInIndexWithURL:nil localImageName:@"bj.png" timeCount:4]; // 加载本地图片
        self.window.rootViewController = ZHVC;
    }
    return YES;
}

作者:Haleszh
链接:http://08643.cn/p/240032c245ec
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351