扩展SwiftUI中可放置区域的高度?

时间:2020-04-11 17:48:14

标签: macos swiftui

将可接受的项目拖到可拖放区域上方时,如何扩大其高度? (而且,我想为高度变化设置动画)

我尝试过onHover修饰符没有任何运气,因为它只有在将鼠标移到可拖放区域而不拖动项目时才会起作用。

1 个答案:

答案 0 :(得分:0)

这就是我解决问题的方法:

首先,我有一个视图,该区域是放置物品的区域。它高几个像素,位于“已经存在的项目之间”。

此视图的状态为hovered。设置为true时,视图将具有突出显示的光晕和更大的高度。

struct DropableView: View {
    @State  var hovered:      Bool    = false

    var body: some View {
        Rectangle()
            .stroke(self. hovered ? Color.accentColor : Color.clear,
                    lineWidth: 3.0)
            .frame(height: (hovered ? 20.0 : 5.0) )
            .onDrop(of: [UTI_myOwn_UTI],
                    delegate: DropDelegate(hovered: self.$hovered))
    }
}

然后,我们需要一个拖放委托,当用鼠标输入/退出该委托时,它将更改状态,以便重新绘制视图。确保状态修改是在主线程上完成的,因为它将重新绘制UI。

struct DropDelegate: DropDelegate {
    @Binding    var hovered:          Bool

    func dropEntered(info: DropInfo) {
        DispatchQueue.main.async {
            self. hovered = true
        }
    }

    func dropExited(info: DropInfo)  {
        DispatchQueue.main.async {
            self. hovered = false
        }
    }
}

请注意,我没有找到更改动画的方法。如果有人想详细说明...

当然,您需要为拖放操作提供validateDrop(info:)performDrop(info:)方法,并使用.onDrag修饰符和NSItemProvider开始拖动操作,但这不是主题。在这里。