本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正。
本文相关目录:
===================== 所属文集:6.0 图形和多媒体 =====================
6.1 Quartz 2D->1.1 Quartz 2D 简介
6.2 核心动画->1.0 CALayer的简介
··················· 1.1 CALayer的基本属性
··················· 1.2 CALayer的创建 & 非根layer的隐式动画
··················· 2.0 Core Animation(核心动画)
··················· 3.0 核心动画 & UIView动画
··················· 4.0 常用动画效果
6.3 音频->1.0 录音 未发布
············· 2.0 音效/音乐 未发布
············· iOS项目Demo - 仿·QQ音乐播放器 未发布
6.4 视频->1.0 视频播放方案
············· 2.0 视频特效:画中画
············· 3.0 视频功能
············· iOS项目Demo - 仿·慕课网视频播放器 未发布
6.5 直播 未发布
6.5 直播-> iOS项目Demo - 仿·斗鱼直播 未发布
===================== 所属文集:6.0 图形和多媒体 =====================
视频目录

视频特效:画中画

代码6:画中画 demo
编译环境:Xcode 8.0
模拟器版本:iOS 10
Swift版本:3.0
【OC语言】
#import "ViewController.h"
#import <AVKit/AVKit.h> // 框架
#import <AVFoundation/AVFoundation.h> // AVPlayer
@interface ViewController ()<AVPlayerViewControllerDelegate>
@property (nonatomic,strong)AVPlayerViewController *AVPlayerVC;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)AVPlayerViewController:(UIButton *)sender {
// 1.创建播放控制器
AVPlayerViewController *vc = [[AVPlayerViewController alloc]init];
self.AVPlayerVC = vc;
// 设置代理
vc.delegate = self;
// 创建URL
NSString *path = [[NSBundle mainBundle]pathForResource:@"1.mp4" ofType:nil];
NSURL *url = [NSURL fileURLWithPath:path];
// 创建播放器
AVPlayer *player = [[AVPlayer alloc]initWithURL:url];
vc.player = player;
// 是否显示控制按钮
//vc.showsPlaybackControls = NO;
// 2.播放
[player play];
// 3.展示界面
[self presentViewController:vc animated:YES completion:nil];
// 4.注册通知中心 接受通知(AVPlayerItemDidPlayToEndTimeNotification)
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didPlayToEndTime)
name:AVPlayerItemDidPlayToEndTimeNotification
object:nil];
}
// 接收到通知会来到此方法 (效果:切换下一个视频)
- (void)didPlayToEndTime{
// 创建URL,更换视频
NSString *path = [[NSBundle mainBundle]pathForResource:@"2.mp4" ofType:nil];
NSURL *url = [NSURL fileURLWithPath:path];
// 直接 换掉 vc的 player
AVPlayer *player = [[AVPlayer alloc]initWithURL:url];
// 播放
[player play];
// 设置为替换后的新player
self.AVPlayerVC.player = player;
}
#pragma mark - AVPlayerViewControllerDelegate代理方法(对用户画中画的操作进行监听)
// 将要开始画中画时调用的方法
- (void)playerViewControllerWillStartPictureInPicture:(AVPlayerViewController *)playerViewController{
NSLog(@"1将要开始画中画");
}
// 已经开始画中画时调用的方法
- (void)playerViewControllerDidStartPictureInPicture:(AVPlayerViewController *)playerViewController{
NSLog(@"2已经开始画中画");
}
// 开启画中画失败调用的方法
- (void)playerViewController:(AVPlayerViewController *)playerViewController failedToStartPictureInPictureWithError:(NSError *)error{
NSLog(@"3开启画中画失败调");
}
// 将要停止画中画时调用的方法
- (void)playerViewControllerWillStopPictureInPicture:(AVPlayerViewController *)playerViewController{
NSLog(@"4将要停止画中画");
}
// 已经停止画中画时调用的方法
- (void)playerViewControllerDidStopPictureInPicture:(AVPlayerViewController *)playerViewController{
NSLog(@"5已经停止画中画");
}
// 是否在开始画中画时自动将当前的播放界面dismiss掉 返回YES则自动dismiss 返回NO则不会自动dismiss
- (BOOL)playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart:(AVPlayerViewController *)playerViewController{
NSLog(@"6自动将当前的播放界面dismiss掉");
return YES;
}
// 用户点击还原按钮,从画中画模式还原回app内嵌模式时调用的方法
- (void)playerViewController:(AVPlayerViewController *)playerViewController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL restored))completionHandler{
NSLog(@"7从画中画模式还原回app内嵌模式");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
【Swift 语言】(暂无,以后补上)
本文源码 Demo 详见 Github(方便的话,帮忙点个Star,谢啦!)
https://github.com/shorfng/iOS_6.0_Graphics_and_multimedia.git
作者:蓝田(Loto)
出处: 简书
如果你觉得本篇文章对你有所帮助,请点击文章末尾下方“喜欢”
如有疑问,请通过以下方式交流:
① 评论区回复
② 微信(加好友请注明“简书+称呼”)
③发送邮件
至 shorfng@126.com
本文版权归作者和本网站共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
网友评论