iOS播放器常用功能
发布日期:2022-03-18 08:27:38
浏览次数:41
分类:技术文章
本文共 2950 字,大约阅读时间需要 9 分钟。
iOS播放器常用功能
强制横屏
在播放器中常见强制横屏,例如,如下这种:
OC实现代码如下:
if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) { SEL selector = NSSelectorFromString(@"setOrientation:"); NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]]; [invocation setSelector:selector]; [invocation setTarget:[UIDevice currentDevice]]; int val = orientation; // 从2开始是因为0 1 两个参数已经被selector和target占用 [invocation setArgument:&val atIndex:2]; [invocation invoke]; }
拖动调节音量
在播放器器中,通常是拖动来调节音量。需要使用到MPVolumeView
MPVolumeView
是Media Player Framework中的一个UI组件,直接包含了对系统音量和Airplay设备的音频镜像路由的控制功能。其中包含一个MPVolumeSlider
的subview
用来控制音量。这个MPVolumeSlider
是一个私有类,我们无法手动创建此类,但这个类是UISlider的子类。 遍历MPVolumeSlider
的subview
获取到这个slider MPVolumeView *volumeView = [[MPVolumeView alloc] init];for (UIView *view in [volumeView subviews]){ if ([view.class.description isEqualToString:@"MPVolumeSlider"]){ _volumeSlider = (UISlider*)view; break; }}
添加对应的拖动手势
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panDirection:)];pan.delegate = self;[self.view addGestureRecognizer:pan];
对应的拖动事件为,这里仅仅是一个简单的例子,上下拖动时改变slider的value
:
/** * pan手势事件 * * @param pan 拖动手势 */ - (void)panDirection:(UIPanGestureRecognizer *)pan { CGPoint veloctyPoint = [pan velocityInView:self.view]; switch (pan.state) { case UIGestureRecognizerStateBegan:{ // 开始移动 // 使用绝对值来判断移动的方向 CGFloat x = fabs(veloctyPoint.x); CGFloat y = fabs(veloctyPoint.y); if (x > y) { // 水平移动 _verticalPan = NO; } else if (x < y){ // 垂直移动 _verticalPan = YES; } break; } case UIGestureRecognizerStateChanged:{ // 正在移动 if (_verticalPan) { self.volumeSlider.value -= veloctyPoint.y / 10000; } } case UIGestureRecognizerStateEnded:{ // 移动停止 } default: break; } }
结果要在真机上测试才行,结果如下:
调节亮度
通洞调节亮度跟上面差不多,如下:
[UIScreen mainScreen].brightness -= veloctyPoint.x / 10000;
只是没有提示,所以自己要自定义一个提示框BrightnessView。在中BrightnessView使用KVO观察[UIScreen mainScreen]
的brightness的变化
[[UIScreen mainScreen] addObserver:self forKeyPath:@"brightness" options:NSKeyValueObservingOptionNew context:NULL];
在亮度变化后作出相应的调整:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { CGFloat sound = [change[@"new"] floatValue]; //处理对应的逻辑 }
转载地址:https://windzen.blog.csdn.net/article/details/52587270 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年03月24日 03时13分25秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
linux查看系统所有变量,Linux系统各指标命令
2021-06-24
linux打印机守护程序,linux下怎么编写守护程序呢?
2021-06-24
嵌入式linux 设置时间,time_clock控件应用,使用命令date -s 12:00:00手动设置时间后,时间就停住不走了,我在Ubuntu和嵌入式Linux平台都测试到了...
2021-06-24
linux监控windows,zabbix监控之linux及windows客户端安装配置
2021-06-24
linux中怎么卸载tree,Liunx系统命令中tree命令详解
2021-06-24
linux 网络音箱 混音6,Linux音频编程(三)混音器介绍
2021-06-24
mysql截取栏目字符_substring从指定字符串开始截取(图)
2021-06-24
python类属性初始化_Python类定义、属性、初始化和析构
2021-06-24
mysql构建url给scrapy_Python Scrapy从mysq填充起始url
2021-06-24
owdcloud mysql_MySQL在Ubuntu远程配置
2021-06-24
python基础装饰器_Python基础 装饰器及练习
2021-06-24
python导出csv不带引号的句子_不带双引号写入CSV文件
2021-06-24
python爬虫代码模板_Python:学习Python爬虫的第一天
2021-06-24
springboot获取原生js请求_springboot跳转原生html
2021-06-24
java buffer nio_Java NIO之Buffer(缓冲区)入门
2021-06-24
android java加密_android 和java平台通用的AES加密解密
2021-06-24
java导出类_java导出excel工具类
2021-06-24
java学习手册下载_Java学习手册
2021-06-24