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

移动 - 不复制 - 快速拖放图像“拖放交互”

如何解决移动 - 不复制 - 快速拖放图像“拖放交互”

我正在尝试使用 Xcode,swift 在我的应用程序中实现拖放功能

快速回顾:这是一款建造火箭的游戏,用户可以将火箭的部件拖动到正确的位置,火箭的部件和每个火箭的位置都是图像。

我有两个问题,第一个问题是当我将图像拖动到其位置时,它被复制而不是移动。我希望图像完全移动到该位置。

第二个问题是当图片移动到该位置时,我希望用户能够再次将零件返回到零件侧。

这是拖动部分:

func dragInteraction(_ interaction: UIDragInteraction,itemsForBeginning session: UIDragSession) -> [UIDragItem] {
    
    if let imageView = interaction.view as? UIImageView{
                guard let image = imageView.image else {return []}
                let provider = NSItemProvider(object: image)
        let item = UIDragItem.init(itemProvider: provider)
                return[item]
            }
            return []
}

这里是放置部分:

func dropInteraction(_ interaction: UIDropInteraction,sessionDidUpdate session: UIDropSession) -> UIDropProposal {
        let location = session.location(in: self.view)
        let dropOperation: UIDropOperation?
        if session.canLoadobjects(ofClass: UIImage.self) {
            if  rocketLocation0.frame.contains(location) {
                dropOperation = .copy
                selectedFinger = 0
            } else if  rocketLocation1.frame.contains(location) {
                dropOperation = .copy
                selectedFinger = 1
                
            } else if  rocketLocation2.frame.contains(location) {
                dropOperation = .copy
                selectedFinger = 2
                
            } else if  rocketLocation3.frame.contains(location) {
                dropOperation = .copy
                selectedFinger = 3
                
            } else if  rocketLocation4.frame.contains(location) {
                dropOperation = .copy
                selectedFinger = 4
                
            } else if  rocketLocation5.frame.contains(location) {
                dropOperation = .copy
                selectedFinger = 5
                
            } else if  rocketLocation6.frame.contains(location) {
                dropOperation = .copy
                selectedFinger = 6
                
            } else if  rocketLocation7.frame.contains(location) {
                dropOperation = .copy
                selectedFinger = 7
                
            } else if  rocketLocation8.frame.contains(location) {
                dropOperation = .copy
                selectedFinger = 8
                
            } else {
                dropOperation = .cancel
                selectedFinger = -1
            }
        } else {
            dropOperation = .cancel
            selectedFinger = -1
        }
        return UIDropProposal(operation: dropOperation!)
    }

func dropInteraction(_ interaction: UIDropInteraction,performDrop session: UIDropSession) {
        
        if session.canLoadobjects(ofClass: UIImage.self) {
            session.loadobjects(ofClass: UIImage.self) { (items) in
                if let images = items as? [UIImage] {
                    switch self.selectedFinger{
                        
                    case 0 :
                        self.rocketLocation0.image = images.last
                        break
                        
                    case 1 :
                        self.rocketLocation1.image = images.last
                        break
                        
                    case 2 :
                        self.rocketLocation2.image = images.last
                        break
                        
                    case 3 :
                        self.rocketLocation3.image = images.last
                        break
                        
                    case 4 :
                        self.rocketLocation4.image = images.last
                        break
                        
                    case 5 :
                        self.rocketLocation5.image = images.last
                        break
                        
                    case 6 :
                        self.rocketLocation6.image = images.last
                        break
                        
                    case 7 :
                        self.rocketLocation7.image = images.last
                        break
                        
                    case 8 :
                        self.rocketLocation8.image = images.last
                        break
                        
                    default:
                        print("exit")
                    }
                    
                }
            }
        }
        
    }

-------------------- 更新--------------------

我通过删除拖动的图像解决了第一个问题。

我在类的顶部初始化了这个变量:

var draggedImage : UIImageView!

然后,我将这一行添加到了dragInteraction 函数中:

draggedImage = imageView

最后,将中线添加到 drop 函数中的所有案例中:

case 0 :
                        self.rocketLocation0.image = images.last
             //added    self.draggedImage.image = nil
                        break

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