SwiftUI:在视图上用鼠标左键向下拖动窗口

Posted

技术标签:

【中文标题】SwiftUI:在视图上用鼠标左键向下拖动窗口【英文标题】:SwiftUI: Drag WINDOW with Left Mouse Button down on the view 【发布时间】:2022-01-13 04:02:49 【问题描述】:

我有一个包含图像的视图。

@SceneBuilder
var body: some Scene 
    WindowGroup 
        ImageView()
    

ImageView 只是一个图像:

struct ImageView: View  
    var body: some View 
        Image(.logo)
            .resizable()
            .scaledToFill()
    

如何通过鼠标左键点击ImageView来拖动WINDOW?

就像我们通过点击窗口标题/标题/安全区域来拖动窗口一样。

MacOs、SwiftUI 3

Google 确实没有显示任何有用的信息

【问题讨论】:

@SceneBuilder 是新事物还是自定义代码?我没看过。 @swiftPunk 这是原生的东西 swiftwithmajid.com/2020/06/23/what-is-new-in-swiftui,从 swiftUI 2 开始 【参考方案1】:

用法:

Text("drag wnd with me")
    .dragWndWithClick()

返回码:

import Foundation
import SwiftUI

@available(OSX 11.0, *)
extension View 
    func dragWndWithClick() -> some View 
        self.overlay(DragWndView())
    


struct DragWndView: NSViewRepresentable 
    func makeNSView(context: Context) -> NSView 
        return DragWndNSView()
    
    
    func updateNSView(_ nsView: NSView, context: Context)  


class DragWndNSView: NSView 
    override public func mouseDown(with event: NSEvent) 
        NSApp?.mainWindow?.performDrag(with: event)
    

【讨论】:

您定义了一个名为 App 的类!!!,但是如何?是不可能的。目前尚不清楚您的答案实际上如何可用甚至有效。您可以展示工作示例以使不清楚的部分变得清晰。 目前还不清楚您将如何使用您的课程。 发布了更好的解决方案。删除了所有旧的 cmets 我认为在 SwiftUI 中拖动手势会出现问题,您可能会遇到点击按钮或滑块甚至在视图中拖动形状的问题。 是的,可以。您只需要做 ZStack 并将此修改器仅应用于背景层,并且位于前层的按钮或手势没有问题:)

以上是关于SwiftUI:在视图上用鼠标左键向下拖动窗口的主要内容,如果未能解决你的问题,请参考以下文章

DataGrid 用鼠标拖动改变列宽,怎么做

在Word中,按住啥后拖动鼠标就可以改变窗口最大化的位置

猎豹MFC--拖动无边框窗体

tkinter窗口鼠标拖动就会暂停

VC:如何实现窗口和窗口内容在鼠标拖动下改变大小

跨多个子视图的 SwiftUI 拖动手势