Я пытаюсь использовать методы перетаскивания, чтобы перетащить файл .mp3 из Finder в свое приложение (используя Mac Catalyst). До сих пор мне удалось получить (я думаю) необработанные данные из mp3-файла в массив, но я не уверен, как действовать дальше. В конечном итоге я хочу воспроизвести файл .mp3, который был добавлен в приложение с помощью AVAudioPlayerNodes. Это правильный путь, или я должен вместо этого попытаться получить URL-адрес файла, а затем скопировать его в свое приложение? Любая помощь будет потрясающей. Спасибо.
Код: методы делегирования
func dropInteraction(_ interaction: UIDropInteraction, sessionDidUpdate session: UIDropSession) -> UIDropProposal {
if session.localDragSession == nil {
print("yes")
return UIDropProposal(operation: .copy)
}
print("no")
return UIDropProposal(operation: .cancel)
}
func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) {
print("somethng happened")
session.loadObjects(ofClass: MP3Class.self) { objects in
for url in objects as! [MP3Class] {
print(url)
print(objects)
}
}
}
func dropInteraction(_ interaction: UIDropInteraction, canHandle session: UIDropSession) -> Bool {
return session.canLoadObjects(ofClass: MP3Class.self)
}
func customEnableDropping(on view: UIView, dropInteractionDelegate: UIDropInteractionDelegate) {
let dropInteraction = UIDropInteraction(delegate: dropInteractionDelegate)
view.addInteraction(dropInteraction)
}
Пользовательский класс mp3:
class MP3Class: NSObject, NSItemProviderReading {
let data: Data?
required init(mp3Data: Data, typeIdentifier: String) {
data = mp3Data
}
static var readableTypeIdentifiersForItemProvider: [String] {
return [kUTTypeMP3 as String]
}
static func object(withItemProviderData data: Data, typeIdentifier: String) throws -> Self {
return self.init(mp3Data: data, typeIdentifier: typeIdentifier)
}
}