簡體   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