MIDITimeTableView
可自定义和可编辑的时间表网格,用于以节的单位显示与 MIDI 或音频相关的数据。
示例
要求
- Swift 5.0+
- iOS 9.0+
安装
pod 'MIDITimeTableView'
功能
- 易于实现,类似于
UITableView
和UICollectionView
的 Delegate/DataSource API。 - 无限行和单元格。
- 单元格和行头完全可自定义。您可以在它们内部显示任何 UIView。
- 显示条形度量(可选)。
- 显示可选的当前时间可编辑播放头。
- 捏合以放大/缩小。(可选)。
- 编辑单行或多行。
- 拖动它们以改变行列或位置。
- 从右侧边缘拖动以更改持续时间。
- 长按任意单元格以显示可自定义的菜单。
- 使用可自定义的限额保存历史记录,并实现撤销/重做(可选)。
- 自定义网格,以任何样式显示条形、小节和亚小节线。(可选)。
用法
通过脚本或从故事板创建MIDITimeTableView
,并实现其MIDITimeTableViewDataSource
和MIDITimeTableViewDelegate
方法。
需要数据对象来存储每行及其单元格数据。
var rowData: [MIDITimeTableRowData] = [
MIDITimeTableRowData(
cells: [
MIDITimeTableCellData(data: "C7", position: 0, duration: 4),
MIDITimeTableCellData(data: "Dm7", position: 4, duration: 4),
MIDITimeTableCellData(data: "G7b5", position: 8, duration: 4),
MIDITimeTableCellData(data: "C7", position: 12, duration: 4),
],
headerCellView: HeaderCellView(title: "Chords"),
cellView: { cellData in
let title = cellData.data as? String ?? ""
return CellView(title: title)
}),
]
MIDITimeTableViewDataSource
很可能与UITableViewDataSource
或UICollectionViewDataSource
API相同。只需提供行数据、行数、拍号,即可开始使用。
func numberOfRows(in midiTimeTableView: MIDITimeTableView) -> Int {
return rowData.count
}
func timeSignature(of midiTimeTableView: MIDITimeTableView) -> MIDITimeTableTimeSignature {
return MIDITimeTableTimeSignature(beats: 4, noteValue: .quarter)
}
func midiTimeTableView(_ midiTimeTableView: MIDITimeTableView, rowAt index: Int) -> MIDITimeTableRowData {
let row = rowData[index]
return row
}
您可以自定义度量条、网格、每个表头和数据单元格。查看示例项目。
MIDITimeTableCellView
是可编辑的,您可以在网格中移动它们,调整它们持续的时间,或者长按以打开删除菜单。您还需要将其子类化以在其上呈现自己的数据。
您可以将minMeasureWidth
和maxMeasureWidth
设置为设置时间表的缩放级别。
文档
AppStore
本库用于我的应用《ChordBud》,欢迎检查。