微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI在移动/动画视图/形状上拖放

如何解决SwiftUI在移动/动画视图/形状上拖放

我正在尝试在SwiftUI中实现拖放功能。看来当视图没有动画效果时,以下代码可以正常工作。但是,当我使用偏移量移动视图时,拖动位置和视图会出现一些问题,例如视图位置与触摸位置不同,视图形状与原始位置不同。

无偏移动画(动画= false)的拖动效果很好:

Dragging without offset animation

拖动偏移动画(动画= true):

Dragging with offset animation true

代码段:

import SwiftUI

struct ContentView: View {
    @Observedobject var dropDelegate = CircleDropDelegate()
    @State var animate = false

    var body: some View {
        vstack(alignment: .leading) {
            Spacer()
        
            Circle()
                .fill(Color.green)
                .offset(x: animate ? 100 : 0)
                .animation(Animation.linear(duration: 5).repeatForever(autoreverses: true))
                .frame(width: 50,height: 50)
                .onDrag({
                    return NSItemProvider(object: "circle" as Nsstring)
                })
        
            Spacer()
        
            Rectangle()
                .fill(Color.green)
                .frame(height: 150)
                .onDrop(of: ["public.text"],delegate: dropDelegate)
        
            Spacer()
        }
        .onAppear {
            animate = true
        }
        .padding()
        .background(Color.init(white: 0.7))
    }
}

class CircleDropDelegate: ObservableObject,DropDelegate {
    @Published var isEntered: Bool = false
    func performDrop(info: DropInfo) -> Bool {
        print("perform drop on Box \(info)")
        return true
    }

    func dropEntered(info: DropInfo) {
        print("circle entered the Box")
        isEntered = true
    }

    func dropExited(info: DropInfo) {
        print("circle exited the Box")
        isEntered = false
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

是否可以解决此问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。