繁体   English   中英

当 .onDrag 在 SwiftUI 中离开视图边界时关闭视图

[英]Close View when .onDrag leaves view boundaries in SwiftUI

拖动项目时,我想在手指越过视图边界时立即关闭对象菜单。 护理:我不想在放下物品时关闭物品。 不幸的是,我不知道如何实现这一目标。

例子

我只是在使用:

struct BuildingItemSlot: View {

    var preview: ObjectPreview
    
    var body: some View {
        VStack() {
            Image(uiImage: UIImage(contentsOfFile: preview.dataPath + "/Raw/Thumbnails/" + preview.id + ".png") ?? UIImage())
                .resizable()
                //.scaledToFit()
                .frame(width: 64, height: 64)
                .padding(4)
                //.border(Color.black, width: 1)
        }
        .onDrag({ NSItemProvider() })
    }
}

嵌入到构成清单的视图中...

VStack() {
     ForEach(networkManager.objectPreviewList.objects ?? []){ preview in 
             BuildingItemSlot(preview: preview)
          }
      }
      .padding(40)

我只需通过以下方式打开和关闭侧面菜单:

.offset(x: stateHandler.openBuildingsMenu ? 0 : 480)

非常感谢,雅各布

方法:

  • 使用onDrop(of:delegate)是要在可以接受放置的视图上使用的视图修饰符。
  • DropDelegate 具有以下功能
    • dropEntered ,
    • dropExited ,
    • dropUpdated
    • validateDrop - 您可以动态验证 drop 是否有效
    • performDrop
  • 通过添加打印语句来玩弄上述功能

中断:

  • 无法中断拖动手势,但validateDrop应该让您控制何时接受/拒绝动态放置。

参考:

苹果电脑

iOS

笔记:

  • 对于 macOS 和 iOS 的拖放操作存在一些 SwiftUI 错误,如果您遇到任何错误,请发表评论,因为很难列出所有错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM