将可接受的项目拖到可拖放区域上方时,如何扩大其高度? (而且,我想为高度变化设置动画)
我尝试过onHover修饰符没有任何运气,因为它只有在将鼠标移到可拖放区域而不拖动项目时才会起作用。
答案 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开始拖动操作,但这不是主题。在这里。