在 Xcode 个 Playgrounds 中实现 TouchBar 功能
Implement TouchBar functionality in Xcode Playgrounds
如何在仅使用 Xcode Playgrounds 的情况下实现 NSTouchBar
?我意识到 NSTouchBar
及其伴随方法包括 makeTouchBar()
包含在 NSResponder
class 中,它是 NSView
的超 class, NSViewController
、NSWindow
和 SKView
(NSView
的子class)
正是出于这个原因,我有点不确定如何访问 TouchBar。 NSResponder
的子class 太多了,我不确定哪一个是正确的。据我所知,我什至无法访问所有这些,包括 Playground 的 NSWindow
,我怀疑它可能是我需要访问的那个。
我当前的设置是:
let containerView = SKView()
PlaygroundPage.current.liveView = containerView
let containterScene = SKScene()
containerView.presentScene(containterScene)
在检查响应链时,对于 SKView,我得到:
<SKScene> name:'(null)' frame:{{-250, -250}, {500, 500}} anchor:{0.5, 0.5}
对于 SKScene:
<SKView: 0x7fba36037a00>
<NSView: 0x7fba32d6fe80>
<PlaygroundViewBridgeService: 0x7fba32d569e0>
<NSNextStepFrame: 0x7fba32d76e20>
<NSWindow: 0x7fba32e177e0>
由于某些原因,SKScene 和 SKView 不在同一个链中,我似乎无法访问任何高于 SKView 的响应者。有没有办法扩展已经存在的功能 NSWindow
?
另一个问题是许多关于使用 TouchBar 的教程需要访问 AppDelegate,我认为 Xcode Storyboards 中没有。
如能提供在 Storyboards 中实现 TouchBar 的任何帮助,我们将不胜感激。
解决方法其实很简单。创建 NSViewController
的自定义子类并在其中实现 TouchBar 覆盖功能。
然后执行上面的代码:
let containerView = CustomSKView()
let containterScene = CustomSKScene()
containerView.presentScene(containerScene)
添加了以下内容。
let containerViewController = CustomNSViewController()
containerViewController.view = containerView
PlaygroundPage.current.liveView = containerViewController.view
这会在响应链中设置您的自定义 NSViewController
,使其能够处理 Touch Bar。也无需担心 App Delegate。
如何在仅使用 Xcode Playgrounds 的情况下实现 NSTouchBar
?我意识到 NSTouchBar
及其伴随方法包括 makeTouchBar()
包含在 NSResponder
class 中,它是 NSView
的超 class, NSViewController
、NSWindow
和 SKView
(NSView
的子class)
正是出于这个原因,我有点不确定如何访问 TouchBar。 NSResponder
的子class 太多了,我不确定哪一个是正确的。据我所知,我什至无法访问所有这些,包括 Playground 的 NSWindow
,我怀疑它可能是我需要访问的那个。
我当前的设置是:
let containerView = SKView()
PlaygroundPage.current.liveView = containerView
let containterScene = SKScene()
containerView.presentScene(containterScene)
在检查响应链时,对于 SKView,我得到:
<SKScene> name:'(null)' frame:{{-250, -250}, {500, 500}} anchor:{0.5, 0.5}
对于 SKScene:
<SKView: 0x7fba36037a00>
<NSView: 0x7fba32d6fe80>
<PlaygroundViewBridgeService: 0x7fba32d569e0>
<NSNextStepFrame: 0x7fba32d76e20>
<NSWindow: 0x7fba32e177e0>
由于某些原因,SKScene 和 SKView 不在同一个链中,我似乎无法访问任何高于 SKView 的响应者。有没有办法扩展已经存在的功能 NSWindow
?
另一个问题是许多关于使用 TouchBar 的教程需要访问 AppDelegate,我认为 Xcode Storyboards 中没有。
如能提供在 Storyboards 中实现 TouchBar 的任何帮助,我们将不胜感激。
解决方法其实很简单。创建 NSViewController
的自定义子类并在其中实现 TouchBar 覆盖功能。
然后执行上面的代码:
let containerView = CustomSKView()
let containterScene = CustomSKScene()
containerView.presentScene(containerScene)
添加了以下内容。
let containerViewController = CustomNSViewController()
containerViewController.view = containerView
PlaygroundPage.current.liveView = containerViewController.view
这会在响应链中设置您的自定义 NSViewController
,使其能够处理 Touch Bar。也无需担心 App Delegate。