iOS开发之AVKit框架使用

简介: iOS开发之AVKit框架使用

一、引言


   在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFoundation的一层视图层封装。其中相关文件和类都十分简单,本篇博客主要整理和总结AVKit中相关类的使用方法。


二、AVRoutePickerView


   AVRoutePickerView是iOS 11后新加入的类,AirPlay是iOS设备方便用户使用的一大特点。其作用是将当前手机播放的音频或者视频投送到其他外部设备上,例如支持AirPlay的电视,车载设备等。AVRoutePickerView只是一个按钮,其用来方便用户可以直接在应用程序内唤出AirPlay选择窗口。示例如下:


- (void)viewDidLoad {

   [super viewDidLoad];

   AVRoutePickerView * view = [[AVRoutePickerView alloc]initWithFrame:CGRectMake(100, 100, 60, 60)];

   //活跃状态颜色

   view.activeTintColor = [UIColor redColor];

   //设置代理

   view.delegate = self;

   [self.view addSubview:view];

}

//AirPlay界面弹出时回调

- (void)routePickerViewWillBeginPresentingRoutes:(AVRoutePickerView *)routePickerView{

   NSLog(@"!!!!!!!!");

}

//AirPlay界面结束时回调

- (void)routePickerViewDidEndPresentingRoutes:(AVRoutePickerView *)routePickerView{

   NSLog(@"@@@@@@@@");

}

按钮和弹出界面效果如下:


image.png




从上面的示例代码也可以看出,对于AVRoutePickerView,我们基本没有任何可以进行自定义的余地,从UI效果到按钮的触发方法全部由AVKit封装好了,它只是一个唤出系统功能的接口。


三、AVPlayerViewController


   AVPlayerViewController是对AVFoundation中的AVPlayer与AVPlayerLayer的封装,它是一个封装好的视图控制器,包含了视频的播放和控制功能。这个类在iOS8之后可用,解析如下:


@interface AVPlayerViewController : UIViewController

//视频播放器对象

@property (nonatomic, strong, nullable) AVPlayer *player;

//是否显示视频播放控制组件

@property (nonatomic) BOOL showsPlaybackControls;

//设置视频的填充方式

/*

//按比例缩放

AVF_EXPORT AVLayerVideoGravity const AVLayerVideoGravityResizeAspect NS_AVAILABLE(10_7, 4_0);

//按比例填充

AVF_EXPORT AVLayerVideoGravity const AVLayerVideoGravityResizeAspectFill NS_AVAILABLE(10_7, 4_0);

//充满

AVF_EXPORT AVLayerVideoGravity const AVLayerVideoGravityResize NS_AVAILABLE(10_7, 4_0);

*/

@property (nonatomic, copy) AVLayerVideoGravity videoGravity;

//视频的第一帧是否已经准备好了

@property (nonatomic, readonly, getter = isReadyForDisplay) BOOL readyForDisplay;

//获取视频的尺寸

@property (nonatomic, readonly) CGRect videoBounds;

//内容覆盖层 可以向其上添加子视图 会出现在视频层与控制层之间

@property (nonatomic, readonly, nullable) UIView *contentOverlayView;

//是否允许画中画  iOS9以上可用 ipad可用

@property (nonatomic) BOOL allowsPictureInPicturePlayback API_AVAILABLE(ios(9.0));

//是否对信息中心的播放器信息进行更新 默认为YES

@property (nonatomic) BOOL updatesNowPlayingInfoCenter API_AVAILABLE(ios(10.0));

//是否默认进行全屏播放

@property (nonatomic) BOOL entersFullScreenWhenPlaybackBegins API_AVAILABLE(ios(11.0));

//播放结束后 是否默认退出全屏

@property (nonatomic) BOOL exitsFullScreenWhenPlaybackEnds API_AVAILABLE(ios(11.0));

//代理

@property (nonatomic, weak, nullable) id <AVPlayerViewControllerDelegate> delegate API_AVAILABLE(ios(9.0));

@end

AVPlayerViewControllerDelegate解析如下:


//将要开始画中画时调用

- (void)playerViewControllerWillStartPictureInPicture:(AVPlayerViewController *)playerViewController;

//已经开始画中画时调用

- (void)playerViewControllerDidStartPictureInPicture:(AVPlayerViewController *)playerViewController;

//开启画中画失败调用

- (void)playerViewController:(AVPlayerViewController *)playerViewController failedToStartPictureInPictureWithError:(NSError *)error;

//将要结束画中画调用

- (void)playerViewControllerWillStopPictureInPicture:(AVPlayerViewController *)playerViewController;

//已经结束画中画调用

- (void)playerViewControllerDidStopPictureInPicture:(AVPlayerViewController *)playerViewController;

//是否自动关闭控制器当画中画开始时

- (BOOL)playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart:(AVPlayerViewController *)playerViewController;

//画中画结束后回复之前的用户界面

- (void)playerViewController:(AVPlayerViewController *)playerViewController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL restored))completionHandler;

四、AVPictureInPictureController


     AVPictureInPictureController是一个控制器,用来对画中画进行相关操作,解析如下:


@interface AVPictureInPictureController : NSObject

//获取当前设备是否支持画中画

+ (BOOL)isPictureInPictureSupported;

//画中画转换开始按钮图像

+ (UIImage *)pictureInPictureButtonStartImageCompatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection;

//画中画转换结束按钮图像

+ (UIImage *)pictureInPictureButtonStopImageCompatibleWithTraitCollection:(nullable UITraitCollection *)traitCollection;

//构造方法

- (nullable instancetype)initWithPlayerLayer:(AVPlayerLayer *)playerLayer;

//播放器视图

@property (nonatomic, readonly) AVPlayerLayer *playerLayer;

//代理

@property (nonatomic, weak, nullable) id <AVPictureInPictureControllerDelegate> delegate;

//开始画中画

- (void)startPictureInPicture;

//结束画中画

- (void)stopPictureInPicture;

//画中画目前是否可用

@property (nonatomic, readonly, getter = isPictureInPicturePossible) BOOL pictureInPicturePossible;

//画中画是否激活

@property (nonatomic, readonly, getter = isPictureInPictureActive) BOOL pictureInPictureActive;

//是否支持画中画

@property (nonatomic, readonly, getter = isPictureInPictureSuspended) BOOL pictureInPictureSuspended;

目录
相关文章
|
2月前
|
搜索推荐 数据管理 定位技术
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
252 60
|
10天前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
102 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
1月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
127 66
|
21天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
1月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
146 3
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
2月前
|
安全 IDE Swift
探索iOS开发之旅:从初学者到专家
在这篇文章中,我们将一起踏上iOS开发的旅程,从基础概念的理解到深入掌握核心技术。无论你是编程新手还是希望提升技能的开发者,这里都有你需要的指南和启示。我们将通过实际案例和代码示例,展示如何构建一个功能齐全的iOS应用。准备好了吗?让我们一起开始吧!
|
2月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
45 2

热门文章

最新文章