DanmakuKit 1.5.0

DanmakuKit 1.5.0

qyizhong 维护。



  • qyz777

DanmakuKit

Version License Platform

DanmakuKit(中文)

简介

DanmakuKit 是一个高性能库,提供了弹幕的基本功能。它提供了一组进程,允许您通过 cellModel 生成弹幕单元格,每个弹幕可以同步或异步绘制。

中文博客

如下面的 GIF 所示,DanmakuKit 提供了三种弹幕发射类型:飘浮、顶部和底部。

Demo_0

Demo_1

支持的特性

  • 速度调整
  • 轨道高度调整
  • 显示区域调整
  • 点击回调
  • 支持暂停或播放单个弹幕
  • 提供属性指定弹幕是否可以重叠
  • 支持对不同类型的轨道禁用弹幕
  • 支持设置进度属性,以便视图立即渲染弹幕
  • 支持清除所有弹幕
  • 支持 Gif 弹幕

使用指南

绘制丹movu

  1. 实现一个继承自 DanmakuCellModel 的模型。在这个模型中,您需要添加您自己的属性和方法来绘制弹幕。
class DanmakuTextCellModel: DanmakuCellModel {
    var identifier = ""
    
    var text = ""
    
    var font = UIFont.systemFont(ofSize: 15)
    
    var offsetTime: TimeInterval = 0
    
    var cellClass: DanmakuCell.Type {
        return DanmakuTextCell.self
    }
    
    var size: CGSize = .zero
    
    var track: UInt?
    
    var displayTime: Double = 8
    
    var type: DanmakuCellType = .floating
    
    var isPause = false
    
    func calculateSize() {
        size = NSString(string: text).boundingRect(with: CGSize(width: CGFloat(Float.infinity
            ), height: 20), options: [.usesFontLeading, .usesLineFragmentOrigin], attributes: [.font: font], context: nil).size
    }
    
    func isEqual(to cellModel: DanmakuCellModel) -> Bool {
        return identifier == cellModel.identifier
    }
}
  1. 实现一个继承自 DanmakuCell 的视图。然后您需要重写 displaying 方法,并使用 CGContext 绘制弹幕。**需要注意的是,当调用 displaying 方法时不在主线程上,因此您需要考虑多线程问题。**
class DanmakuTextCell: DanmakuCell {
    required init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = .clear
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
  
    override func displaying(_ context: CGContext, _ size: CGSize, _ isCancelled: Bool) {
        guard let model = model as? DanmakuTextCellModel else { return }
        let text = NSString(string: model.text)
        context.setLineWidth(1)
        context.setLineJoin(.round)
        context.setStrokeColor(UIColor.white.cgColor)
        context.saveGState()
        context.setTextDrawingMode(.stroke)
        let attributes: [NSAttributedString.Key: Any] = [.font: model.font, .foregroundColor: UIColor.white]
        text.draw(at: .zero, withAttributes: attributes)
        context.restoreGState()
        context.setTextDrawingMode(.fill)
        text.draw(at: .zero, withAttributes: attributes)
    }
}
  1. 将 DanmakuCellModel 传递给 DanmakuView 以显示弹幕。
let danmakuView = DanmakuView(frame: CGRect(x: 0, y: 0, width: 350, height: 250))
view.addSubview(danmakuView)
let cellModel = DanmakuTextCellModel(json: nil)
cellModel.displayTime = displayTime
cellModel.text = contents[index]
cellModel.identifier = String(arc4random())
cellModel.calculateSize()
cellModel.type = .floating
danmakuView.shoot(danmaku: cellModel)

播放丹movu

调用 play() 方法开始显示弹幕。

danmakuView.play()

调用 pause() 方法暂停弹幕播放。

danmakuView.pause()

调用 stop() 方法停止弹幕显示并清理资源。只有调用此方法后才会清理与 DanmakuKit 相关的内存。此方法将在 DanmakuView 销毁时被调用。

danmakuView.stop()

使用 GIF 弹幕

如果您想在弹幕中显示 GIF,则需导入 Gif 子规范,并使用 DanmakuGifCell 和 DanmakuGifCellModel。

其他功能

请查看示例项目以获取更多功能。

需求

swift 5.0+

iOS 9.0+

安装

DanmakuKit 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile

pod 'DanmakuKit', '~> 1.3.0'

许可证

DanmakuKit 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。