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

问题描述 投票:0回答:1

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

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

macos swiftui
1个回答
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启动拖动,但这不是这里的主题。

© www.soinside.com 2019 - 2024. All rights reserved.