在Mac Catalyst应用程序中,如何设置可拖动区域以在屏幕上移动窗口?

问题描述

我的应用程序中有一个自定义的“标题”,带有隐藏的标题栏。

如何将标题(一个简单的UIView)设置为移动窗口的句柄区域?

解决方法

就我而言,我有一个自定义UINavigationController,我需要覆盖touchesBegan,但在您的情况下采用以下代码应该很容易。

我们得到NSWindow对象,该对象在Mac Catalyst中不直接可用,然后在导航栏收到触摸时执行拖动事件。您可以在其他任何视图上使用它,而不必是UINavigation项。

public extension UIResponder {
    
    func performMacCatalystWindowDrag() {
        #if targetEnvironment(macCatalyst)
        guard let nsApp = ((NSClassFromString("NSApplication") as? NSObject.Type)?.value(forKey: "sharedApplication") as? NSObject),let currentEvent = nsApp.value(forKey: "currentEvent") as? NSObject,let nsWindow = currentEvent.value(forKey: "window") as? NSObject else { return }
        nsWindow.perform(NSSelectorFromString("performWindowDragWithEvent:"),with: currentEvent)
        #endif
    }
}

然后在您的自定义导航栏中覆盖touchesBegan

override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?) {
    performMacCatalystWindowDrag()
    super.touchesBegan(touches,with: event)
}

上面的代码不属于我,请点击here查看更多信息。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...