FXDanmaku
高效弹幕,具有点击事件、可重用项目和自定义配置。
特性
- 除了主线程中的 UI 操作,其他操作都在不同的调度队列中执行。
- 遵循生产者-消费者模式,使用 pthread 库。
- 定义了代理协议来处理点击响应或其他事件。
- 注册可重用项目的方 法。定义了 FXDanmakuItem 类,可以通过继承它来自定义自己的项目。
- 许多配置以满足您的产品需求。例如,项目的速度、插入项目的顺序、项目移动的方向等。
- 易于使用。只有三个控制:开始(恢复),暂停,停止。除此之外,大多数方法是线程安全的。
- 适应设备方向的变化。
预览
示例
设置弹幕视图
// Configuration
FXDanmakuConfiguration *config = [FXDanmakuConfiguration defaultConfiguration];
config.rowHeight = [DemoDanmakuItem itemHeight];
config.dataQueueCapacity = 500;
config.itemMinVelocity = 80; // set random velocity between 80 and 120 pt/s
config.itemMaxVelocity = 120;
self.danmaku.configuration = config;
// Delegate
self.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 present
DemoDanmakuItemData *data = [DemoDanmakuItemData data];
[self.danmaku addData:data];
// start running
if (!self.danmaku.isRunning) {
[self.danmaku start];
}
在代理方法中处理点击
- (void)danmaku:(FXDanmaku *)danmaku didClickItem:(FXDanmakuItem *)item withData:(DemoDanmakuItemData *)data {
// handle click event here
}
更多示例在 FXDanmakuDemo.xcworkspace
中。
在 Xcode8 中演示构建成功。
Q&A
1. rowHeight、estimatedRowSpace 和 rowSpace 之间的关系。
2. 如何使用 nib 创建 danmakuItem。
最后,将 IBOutlet 属性拖到设置自定义 danmakuItem 的位置。
3.应对设备方向变化。
只有当你的 danmaku 视图的高度在横向和纵向不同时发生变化时,你才需要做些工作来适应。否则,你不需要添加任何代码。比如说,你的 danmaku 视图在纵向模式下高度是 100pt,但在横向上变为 200pt。那么在你的控制器中添加以下代码。
针对 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];
}
4. 如何限制 FXDanmaku 视图数据队列的容量?
// By setting the FXDanmakuConfiguration
FXDanmakuConfiguration *config = [FXDanmakuConfiguration defaultConfiguration];
// The number of FXDanmakuItemData that FXDanmaku view can hold at maximum count.
config.dataQueueCapacity = 500;
// Beyond this value, the data will be discarded.
除此之外,你还有机会通过代理方法决定在数据队列满时哪些数据可以被加入到队列中。
- (BOOL)shouldAddDanmakuItemDataWhenQueueIsFull:(FXDanmakuItemData *)data {
// Keep adding data with high priority, even the number of the data in queue reaches maximum count
return FXDataPriorityHigh == data.priority;
}
需求
FXDanmaku 需要 iOS 7.0+
。
安装
Cocoapods(iOS7+)
-
将这些行添加到您的Podfile中
platform :ios, 'xxx' target 'xxx' do pod 'FXDanmaku', '~> 1.0.0' end
-
运行
pod install
安装pod
手动(iOS7+)
将 FXDanmaku
文档拖到您的项目中
许可
FXDanmaku 在 MIT 许可证下提供。有关详细信息,请参阅 LICENSE 文件。