如何在 macOS 上的 SwiftUI 视图中检测键盘事件?
我希望能够使用击键来控制特定屏幕上的项目,但不清楚如何检测键盘事件,这通常是通过覆盖keyDown(_ event: NSEvent)in来完成的NSView。
在 UIKit 中,您可以执行以下操作:
UIView.animate(withDuration: TimeInterval, animations: {
//animation
}) { (Bool) in
//code which will be executed after the animation
}
Run Code Online (Sandbox Code Playgroud)
SwiftUI 中有没有类似的东西,或者你能想到一个替代品吗?
当我发布一个 Swift 包时,我喜欢包含一些 Playgrounds 来展示如何使用这个包的示例。在 Swift 5.4 之前,我能够以相对简单的方式执行此操作,但现在我的 Playgrounds 都没有看到我的包模块的内容。这对我来说没有任何意义。
我遵循了 Apple 自己的 WWDC 视频所说明的确切模式,即有一个Playgrounds/文件夹作为您的Sources/文件夹的对等点,然后只需导入包模块。
导入有效,但 Playground 总是报告它无法从模块内部找到任何类型。它们都被标记为public,正如我之前提到的,这些过去工作得很好。
这在Swift 5.4或5.5 中,在Xcode 12.5或13 Beta 中对我不起作用。
我认为一定有一些我不理解的设置或配置。有人可以在这里解释一下最佳做法吗?
作为参考,这里是我的一个简单的 Swift 包,它的 Playgrounds 目前不起作用:https : //github.com/dunesailer/Wordsmith
编辑:它变得更奇怪了。我有一个不同的Swift 包,其结构在我看来完全相同,但它的 Playgrounds 工作正常。什么?那个在这里:https : //github.com/dunesailer/Aesthete
我有一个相当复杂的应用程序,到目前为止一直在使用 AKAppleSequencer,但由于该定序器时不时出现一些奇怪的行为和错误,我一直希望迁移到较新的 AKSequencer。不幸的是,新的音序器似乎没有在 Playgrounds 或太多文档中出现,所以我一直在做一些猜测。我以一种似乎有意义的方式(对我来说)将所有内容连接起来,并且正如我所提到的,使用 AKAppleSequencer 可以正常工作,但是使用 AKSequencer 可以运行,但不会产生任何输出。
我的代码结构被分解为多个部分,因此节点图在不同的位置构建,因此我必须在此处以块的形式显示它,并删除不相关的行。
// This happens during setup
mainMixer = AKMixer()
mainMixer.volume = volume
AudioKit.output = mainMixer
// In later code, the sequencer is constructed
sequencer = AKSequencer()
sequencer!.tempo = tempo
// After the sequencer is created, I create various nodes and tracks, like this
let trackNode = trackDefinition.createNode()
let track = sequencer.addTrack(for: trackNode)
track >>> mainMixer
Run Code Online (Sandbox Code Playgroud)
那里有一条线,我在一个名为 trackDefinition 的东西上调用“createNode()”。我认为该类的详细信息与此处无关,但这里是该方法代码主体的示例。这非常简单。
func createNode() -> AKNode {
let pad = AKMIDISampler()
do {
try pad.loadSoundFont(partConfiguration.settings["soundFontName"]!, …Run Code Online (Sandbox Code Playgroud)