iOS-FXDanmaku弹幕库介绍、相关技术分享
来源:互联网 发布:鼓励坚强的诗 知乎 编辑:程序博客网 时间:2024/06/16 06:45
前言
去年, 2016年, 一大波直播平台在移动端涌出, 直播慢慢步入了人们的视角. 网上如今能够看到各式各样的直播, 如秀场直播、游戏直播、体育直播、娱乐直播等等.
在各种类型的直播中, 弹幕在PC、移动端都几乎成为了标配, 今天在这里主要介绍一下个人开源的iOS弹幕, 以及提前为实现一款弹幕库涉及的相关技术分享
的相关篇章占坑, 虽不细至于手把手教如何实现, 但关键点都会有所涉及且不仅限于实现弹幕, 如iOS中用pthread实现生产者消费者模型、响应正在执行动画对象的点击事件、实现某类对象复用的ReuseQueue、使用GCD封装实现可取消未执行代码块的OperationQueue等等, 对这些更感兴趣的朋友麻烦直接滑至最后一段.
由衷欢迎各位大神指点一二.
Github
Talk is cheap, I'll show you the code.
请大力点击上方超链接⬆️⬆️⬆️⬆️⬆️
特性
- 除了UI操作, 其他操作都以代码块交给异步队列处理了.(使用GCD提交的代码块, 最终会由XNU kernel根据CPU使用情况创建新的线程去执行或分配给其他线程执行)
- 遵循 生产者消费者模式, 通过pthread去阻塞队列而非使用timer或异步队列开启runloop空转
- 定义了包含 弹幕块点击、将出现、已消失事件的delegate
- 提供 注册复用 自定义弹幕块 的方法
- 各种自定义参数, 如弹幕块移速, 弹幕库插入方向(从上, 从下, 随机), 弹幕库移动方向(左到右, 右到左), 重置弹道位移百分比系数(防前后弹幕块碰撞)、弹幕队列容量控制
- 简单易用, 控制方法就三个 start(同时也是恢复), pause, stop. 另外大部分方法都是线程安全的
- 轻易适配设备方向旋转
- 设置单行配置即可作为 跑马灯、直播间公告 使用
预览图
示例
弹幕设置
// ConfigurationFXDanmakuConfiguration *config = [FXDanmakuConfiguration defaultConfiguration];config.rowHeight = [DemoDanmakuItem itemHeight];config.dataQueueCapacity = 500;config.itemMinVelocity = 80; // set random velocity between 80 and 120 pt/sconfig.itemMaxVelocity = 120;self.danmaku.configuration = config;// Delegateself.danmaku.delegate = self;// Reuse[self.danmaku registerNib:[UINib nibWithNibName:NSStringFromClass([DemoDanmakuItem class]) bundle:nil] forItemReuseIdentifier:[DemoDanmakuItem reuseIdentifier]];[self.danmaku registerClass:[DemoBulletinItem class] forItemReuseIdentifier:[DemoBulletinItem reuseIdentifier]];
数据添加
// add data for danmaku view to presentDemoDanmakuItemData *data = [DemoDanmakuItemData data];[self.danmaku addData:data];// start runningif (!self.danmaku.isRunning) { [self.danmaku start];}
代理事件
- (void)danmaku:(FXDanmaku *)danmaku didClickItem:(FXDanmakuItem *)item withData:(DemoDanmakuItemData *)data { // 此处 处理点击}- (void)danmaku:(FXDanmaku *)danmaku willDisplayItem:(FXDanmakuItem *)item withData:(FXDanmakuItemData *)data { // 此处 处理弹幕块将要出现/展示}- (void)danmaku:(FXDanmaku *)danmaku didEndDisplayingItem:(FXDanmakuItem *)item withData:(FXDanmakuItemData *)data { // 此处 处理弹幕块完全离开视线,结束展示}
更多详情 麻烦参照 Gitbub Demo project FXDanmakuDemo.xcworkspace
.
有关弹幕库使用问题答疑
1. rowHeight、estimatedRowSpace and rowSpace 三者之间的关系
2. 如何使用nib创建自定义弹幕块
3. 如何适配设备屏幕旋转
如果你的弹幕View 在横竖屏状态下 高度不一样, 比如竖屏高200pt, 横屏约束却是100pt, 那么需要在对应的controller.m文件中加入以下代码(否则 当你的弹幕块使用AutoLayout进行布局时, 横竖屏切换后, 由于视图的frame会变化多次,导致正在展示的弹幕块 出现布局约束冲突的报错)
iOS8+
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { [self.danmaku pause]; [self.danmaku cleanScreen]; [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { // resume danmaku after orientation did change [self.danmaku start]; }];}
系统版本小于iOS8
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { [self.danmaku pause]; [self.danmaku cleanScreen];}- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { [self.danmaku start];}
安装
Cocoapods(iOS7+)
- Podfile中 视情况对应添加以下内容
platform :ios, 'xxx' target 'xxx' do pod 'FXDanmaku' end
pod install
Manually(iOS7+)
直接拖动 FXDanmaku
文件夹 到你的项目 对应结构下
介绍结尾
欢迎各位 提出宝贵的issues, 更多功能建议, 或者改进之处等等. 同时若各位想要了解弹幕库具体实现的其他相关点, 也可在评论区留言.
实现一款弹幕库涉及的相关技术分享(占坑)
以下篇章还未开写, 仅提前占坑..未完待续..
iOS中用pthread实现生产者消费者模型
响应正在执行动画对象的点击事件
实现某类对象复用的ReuseQueue
使用GCD封装实现可取消未执行代码块的OperationQueue
- iOS-FXDanmaku弹幕库介绍、相关技术分享
- 分享iOS平台弹幕解决方案HJDanmakuDemo
- 弹幕技术
- iOS弹幕
- iOS开源弹幕库BarrageRenderer
- 多媒体相关技术介绍
- 浏览器相关技术介绍
- HTTP相关技术介绍
- 微信分享的相关技术分享
- 案例:弹幕表白技术
- iOS弹幕库OCBarrage-如何hold住每秒5000条巨量弹幕
- iOS实现弹幕功能
- iOS之弹幕效果
- iOS之弹幕效果
- iOS弹幕效果
- iOS 简单弹幕效果
- IOS弹幕效果
- iOS 弹幕制作
- Spark算子执行流程详解之三
- Spark Streaming官方文档复习笔记-1
- Jquery——Day7(验证插件)
- QWT使用之QwtPlotCurve
- 安卓四种补间动画
- iOS-FXDanmaku弹幕库介绍、相关技术分享
- Aixs2开发WebService接口 服务端与客户端简单调用
- sqlserve实用知识
- 【ORACLE】ORA-39014错误
- 提高C#编程水平的50个要点 之十五“使用 using 和 try-finally 来处理资源的释放”
- Hibernate学习笔记2
- python 变量作用域
- retrofit 2.0 使用之图片上传
- Centos6.8安装Redis