如何解决在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查看更多信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。