首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拖放,catalyst

拖放,catalyst
EN

Stack Overflow用户
提问于 2020-06-11 17:47:16
回答 1查看 472关注 0票数 1

我正在尝试使用拖放方法将一个.mp3文件从finder拖到我的应用程序中(使用mac catalyst)。到目前为止,我已经成功地(我猜)将mp3文件中的原始数据放入了一个数组中,但是我不确定如何继续。我最终想要的是播放使用AVAudioPlayerNodes放入应用程序中的.mp3文件。这是正确的方法吗,或者我应该尝试获取文件的URL,然后将其复制到我的应用程序中?任何帮助都是很棒的。谢谢。

代码:委托方法

代码语言:javascript
复制
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类:

代码语言:javascript
复制
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)
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-06-13 15:20:02

好的,我设法让它工作了。所以它非常简单,只需要在performDrop方法中的documents文件夹中创建一个目录,然后您就可以简单地将数据写入文件路径,所以对我来说就是:

代码语言:javascript
复制
        do {
            try url.data!.write(to: filePath, options: .atomic)
            print("succes")
        } catch {
            print("Failed while storing files.")
        }

其中filePath指的是.mp3文件。就这样。我想也许我不能用这种方式玩mp3,但它真的很棒。唯一不起作用的是获得与原始数据相同的文件名。但我相信这也有一个诀窍:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62321540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档