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设备的音频镜像路由的控制功能。其中包含一个MPVolumeSlidersubview用来控制音量。这个MPVolumeSlider是一个私有类,我们无法手动创建此类,但这个类是UISlider的子类。
遍历MPVolumeSlidersubview获取到这个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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Adaptive Layout
下一篇:iOS视频播放

发表评论

最新留言

做的很好,不错不错
[***.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 8086下编译,Ubuntu18.04/Linux下安装DosBox进行8086汇编 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
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