电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

iOS彈幕組件LNDanmakuMaster的具體使用

瀏覽:29日期:2022-09-16 18:54:50

LNDanmakuMaster是一個輕量的彈幕播放器,通過:創建播放器->創建軌道->添加彈幕的方式進行彈幕播放,提供豐富軌道樣式的同時也支持自定義軌道;對傳入的彈幕的視圖層沒有要求(任意的View/Layer);提供多種(目前是3)彈幕分布策略;支持使用軌道組播放特殊彈幕;提供與分布策略的對應的彈幕seek策略。

Github鏈接:LNDanmakuMaster

你可以直接下載這個鏈接并運行上面豐富的Demo,或參考Demo代碼實現自己的彈幕播放器,也可以直接使用Cocoapods👇

Cocoapods

pod ’LNDanmakuMaster’彈幕機制

1.驅動機制視頻播放器的刷新率通常為29frame/s,彈幕播放器采用同樣的刷新頻率會有卡頓感,因此彈幕播放器通常使用自己的刷新驅動,要么是UIView animation,要么是CADisplayLink;CADisplaylink支持更多的細節、進度控制,因此這里我們選用的是CADisplayLink。LNDanmakuClock是這樣一個驅動,封裝了CADisplayLink,增加了一些暫停、銷毀的控制方法,這個時鐘每次的輸出就是從上一次DisplayLink回調到這次displayLink回調的一小段時間。

2.進度控制機制LNDanmakuMaster整體采用時間定義進度,這也是它與其他彈幕框架的主要區別之一,我們的所有進度控制、追趕控制、繁忙度控制,都是使用時間計算的。使用時間變量替代空間變量的優勢包括:

如果你的軌道路線并非直線:如果你希望一個彈幕既可以在水平軌道播放也可以在圓形軌道播放,既要給出角速度,也要給出線速度,如果使用時間單位,只需要給出運行的總時間。 如果你先控制一個曲線軌道兩條彈幕之間的間距,空間間距需要計算曲線的長度,而對時間間距來說處理起來就和直線一樣。 在做一些判斷時,如果使用空間條件做判斷,則需要進行速度、時間相關大量乘除法運算,使用時間可能只需要加減法,雖然我不知道具體是否有優勢,但直觀上感覺乘除法是沒有加減法快的。 如果是像B站那種中間出現一列的彈幕,它不需要速度,只需要顯示的時間就夠了。

總之,使用時間體系替代速度體系,是能統一多種軌道進度控制的一個好方法。

3.刷新機制根據Clock的輸出,我們可以得到一個穩定的回調得知剛剛經過了多長一段時間,那么彈幕的刷新過程就成為:在彈幕的剩余存活時間中扣除剛剛經過的那段時間,并根據扣除后的剩余時間占總時間的百分比來刷新彈幕的位置、大小等信息。經過以上三個主要機制的介紹,已經有了實現一個彈幕框架的所有主要邏輯,剩下的就是一些模塊的細分和細節上的雕琢。

模塊分工

LNDanmakuMaster將整個彈幕框架分成以下幾個部分(Abstract代表支持重寫定制):

模塊名稱 類名 備注 播放器 LNDanmakuPlayer 播放器相當于對整個彈幕框架其他組件的整合,對外提供調用方法和時機代理 分發器 LNDanmakuAbstractDispatcher Dispatcher類似管理軌道的工頭兒,根據軌道集合的狀態決定彈幕放到哪里才是最好的 軌道控制器 LNDanmakuAbstractTrackController 軌道控制器類似一個工人,定期使用工具(Track)維護自己的彈幕,并向Dispatcher反饋自己的(繁忙/空閑)狀態 軌道 LNDanmakuAbstractTrack Track的職責完全符合軌道的定義,它不維護彈幕,只維護任意一條彈幕彈幕在這個軌道上的刷新的位置、大小、仿射變換等屬性與時間進度的映射,像是一個空間信息與時間信息的函數 樣式 LNDanmakuAbstractAttributes 樣式是彈幕的載體,包含了一條彈幕的所有信息,例如:存活時間、位置、攜帶的業務模型、展示時使用的View/Layer等等。對,沒錯,與CollectionViewAttributes十分類似,并根據播放器特性增加了時間戳信息

額外的組件

模塊名稱 類名 備注 軌道組 LNDanmakuTrackGroup 這個組件是用來做一些特殊彈幕播放的,是類似一個Player的更小單元(但沒有自己的驅動),內部包含了一個Dispatcher和若干TrackController

這個組件的意義:某些彈幕播放對軌道有一定的要求,又或是軌道對自己播放的彈幕有一定要求,例如:送禮物的軌道只能出現在屏幕頂端,而不是中央,來避免影響用戶觀看視頻;或者是,圓形的軌道不能那些較長的文字,這樣它看起來就不是那么圓了,等等。一但從兩個方面考慮這個問題,就會陷入:軌道挑選彈幕/彈幕挑選軌道的困境,而實際上兩種情況是都存在的,這兩個問題最后統一使用軌道組解決,用戶指定一個軌道的分組,并可以跨過Player層,直接向這個軌道組拋彈幕,那么這個彈幕就只有可能出現在這個軌道組包含的軌道中;這個功能在Demo中一個彩虹樣式的軌道中得以體現,我將七種顏色的彈幕分別拋入七個軌道組中(每個軌道組有三根軌道,兩個相鄰的軌道組公用中間那個重合的軌道),這樣它們就呈現除了一種彩虹的效果。

使用示例

以上介紹完了這個框架的所有重要組件,這里舉例介紹構建一個最簡單彈幕播放器的過程:1.懶加載一個danmakuPlayer:這個是起碼要做,不需要做任何配置它就可以正常工作

- (LNDanmakuPlayer *)danmakuPlayer{ if (!_danmakuPlayer) { _danmakuPlayer = [[LNDanmakuPlayer alloc] init]; } return _danmakuPlayer;}

2.把這個播放器的容器View加到屏幕上:

[self.view addSubview:self.danmakuPlayer.containerView];

3.給這個Player加一些軌道:Player支持自定義就是主要體現在自定義軌道和彈幕樣式上,所以,所有的軌道都是你親手加上去的,你可以在init/viewDidLoad等初始化的時機做這個時,也可以在Player懶加載時一并加好

- (void)addTrack for (int i = 0; i < 20; i++) { LNDanmakuHorizontalMoveTrackController *horizontalTrackController = [[LNDanmakuHorizontalMoveTrackController alloc] init]; horizontalTrackController.horizontalTrack.startPosition = CGPointMake(0, 44.f + 30.f * i); horizontalTrackController.horizontalTrack.width = self.view.frame.size.width; horizontalTrackController.spaceTimeInterval = 0.f; [self.danmakuPlayer addTrack:horizontalTrackController]; }}

4.讓播放器動起來!現在這個播放器就可以從外界接口隨便一個彈幕并播放在屏幕上了

- (void)startPlay { [self.danmakuPlayer start];}

5.讓我們嘗試放一個簡單的彈幕放上去:

(void)addRandomDanmaku{LNDanmakuAttributes *attributes = [[LNDanmakuAttributes alloc] init];UIView *colorView = [[UIView alloc] init];colorView.backgroundColor = [UIColor redColor];attributes.presentView = colorView;attributes.trackTime =4.f;attributes.size = CGSizeMake(88.f, 44.f);[_player insertAttributes:@[attributes]];}

這個框架盡量使用最符合正常邏輯的方法定義了每個組件的分工來保證它使用起來是最舒服的,并盡可能封裝了那些看起來比較復雜的邏輯:分發、刷新、追趕等等;當然,我覺得一個合理的框架應該是下限很低,上限也很高的,而不是一成不變使用規則(正如掌控疾風的某位男子應該算得上是設計得比較成功的角色),所以,當使用者需要深入探討這些邏輯的時候,也可以從外部輕易定制他們,玩出自己的特色。

后續會陸續更新一些使用上或是原理方面的文章介紹這個框架,雖然實現起來沒有很多高超的技巧,但我認為代碼優秀與否并非取決于使用了多么高深或是精妙的語言特性,而是寫代碼的邏輯和思路;而且,我從心底十分抵制那些沒什么復雜邏輯卻要制定很多使用規則的組件(更惡心的是還要業務線強推),所以這個組件一定會朝著盡量少的使用規則、盡量樸素的代碼、更豐富的功能方向發展。

最后附上幾個Demo中的效果圖

橫向的軌道

iOS彈幕組件LNDanmakuMaster的具體使用

pop動畫軌道

iOS彈幕組件LNDanmakuMaster的具體使用

波浪軌道+軌道分組

iOS彈幕組件LNDanmakuMaster的具體使用

心形軌道

iOS彈幕組件LNDanmakuMaster的具體使用

到此這篇關于iOS彈幕組件LNDanmakuMaster的具體使用的文章就介紹到這了,更多相關iOS彈幕組件LNDanmakuMaster內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: IOS
相關文章:
主站蜘蛛池模板: 臭氧灭菌箱-油桶加热箱-原料桶加热融化烘箱-南京腾阳干燥设备厂 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 冷水机,风冷冷水机,水冷冷水机,螺杆冷水机专业制造商-上海祝松机械有限公司 | 合肥钣金加工-安徽激光切割加工-机箱机柜加工厂家-合肥通快 | 合肥触摸一体机_触摸查询机厂家_合肥拼接屏-安徽迅博智能科技 | 工作服定制,工作服定做,工作服厂家-卡珀职业服装(苏州)有限公司 | 通信天线厂家_室分八木天线_对数周期天线_天线加工厂_林创天线源头厂家 | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | 电线电缆厂家|沈阳电缆厂|电线厂|沈阳英联塑力线缆有限公司 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 江西自考网-江西自学考试网| 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 | 威实软件_软件定制开发_OA_OA办公系统_OA系统_办公自动化软件 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 | 全钢实验台,实验室工作台厂家-无锡市辰之航装饰材料有限公司 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 电液推杆生产厂家|电动推杆|液压推杆-扬州唯升机械有限公司 | 酒糟烘干机-豆渣烘干机-薯渣烘干机-糟渣烘干设备厂家-焦作市真节能环保设备科技有限公司 | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 神超官网_焊接圆锯片_高速钢锯片_硬质合金锯片_浙江神超锯业制造有限公司 | 探伤仪,漆膜厚度测试仪,轮胎花纹深度尺厂家-淄博创宇电子 | 电动葫芦-河北悍象起重机械有限公司 | 金联宇电缆|广东金联宇电缆厂家_广东金联宇电缆实业有限公司 | 热镀锌槽钢|角钢|工字钢|圆钢|H型钢|扁钢|花纹板-天津千百顺钢铁贸易有限公司 | 手板_手板模型制作_cnc手板加工厂-东莞天泓 | 上海防爆真空干燥箱-上海防爆冷库-上海防爆冷柜?-上海浦下防爆设备厂家? | 盛源真空泵|空压机-浙江盛源空压机制造有限公司-【盛源官网】 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 报警器_家用防盗报警器_烟雾报警器_燃气报警器_防盗报警系统厂家-深圳市刻锐智能科技有限公司 | 校园气象站_超声波气象站_农业气象站_雨量监测站_风途科技 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 不锈钢列管式冷凝器,换热器厂家-无锡飞尔诺环境工程有限公司 | 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | 北京开源多邦科技发展有限公司官网 | 电动葫芦|防爆钢丝绳电动葫芦|手拉葫芦-保定大力起重葫芦有限公司 | 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | 沈阳建筑设计公司_加固改造设计_厂房设计_设计资质加盟【金辉设计】 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 新疆系统集成_新疆系统集成公司_系统集成项目-新疆利成科技 |