中文)
DanmakuKit(简介
DanmakuKit 是一个高性能库,提供了弹幕的基本功能。它提供了一组进程,允许您通过 cellModel 生成弹幕单元格,每个弹幕可以同步或异步绘制。
如下面的 GIF 所示,DanmakuKit 提供了三种弹幕发射类型:飘浮、顶部和底部。
支持的特性
- 速度调整
- 轨道高度调整
- 显示区域调整
- 点击回调
- 支持暂停或播放单个弹幕
- 提供属性指定弹幕是否可以重叠
- 支持对不同类型的轨道禁用弹幕
- 支持设置进度属性,以便视图立即渲染弹幕
- 支持清除所有弹幕
- 支持 Gif 弹幕
使用指南
绘制丹movu
- 实现一个继承自 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
}
}
- 实现一个继承自 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)
}
}
- 将 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 文件。