macOS 拖拽操作Drag和Drop (一)

本文介绍了在macOS上实现拖拽操作的基本过程,包括源和目的地的概念,拖拽session的步骤,以及如何创建拖拽目的地。通过遵守NSDraggingSource和NSDraggingDestination协议,利用NSPasteboard交换数据。文章详细讲解了DestinationView的创建和拖拽数据的处理,展示了如何处理拖拽进入、着陆和结束的场景。
摘要由CSDN通过智能技术生成

英文原文地址

继续学习macOS开发相关内容,在Mac上的操作拖拽是比较常见的,是人机交互的重要部分,最常用的便是Finder文件操作

  • 粘贴板和拖拽session

拖拽和投放包含一个 源(source) 和一个目的地(destination)

从一个source拖拽出一个项目,它需要实现 NSDraggingSource 协议。然后投放它到一个destination中,它则必须实现 NSDraggingDestination 协议,为了确定是接受还是拒绝收到的项目。 NSPasteboard 是用来帮助交换数据的类。

整个的过程被称作 dragging session :

当拖拽一个文件的时候,就会发生下列的事:

1.当开始拖拽的时候,一个 拖拽session 就开始了
2.选择一些图片数据显示在拖拽粘贴板上
3.将图片投放到一个destination上,它会选择拒绝还是接受它,并采取一些动作 - 例如,移动文件到另一个目录下
4.拖拽session 结束

  • 创建一个拖拽的destination 拖拽的destination是一个view或window,它接受来自拖拽粘贴板的数据类型,需要遵守(adopt) NSDraggingDestination 协议来创建拖拽的目的地。

这个图表从拖拽destination的角度,展示了对于拖拽session的剖析。

创建destination包含以下几个步骤:

1.当构建view的时候,必须声明从任何的拖拽session中可以接受的类型。
2.当一个拖拽的图片进入这个view的时候你需要去实现决定这个view是否接受这种数据类型的逻辑,并让拖拽session知道这个决定。
3.当拖拽的图片“着陆”(lands on)在这个view上时,你会使用从拖拽粘贴板而来的数据,去展示它在你的view上。

创建一个DestinationView.swift,作为拖拽的目的地

注册view接受的数据类型,定义了支持类型的集合,仅支持 URLs,然后调用 register(forDraggedTypes:) 来接受包含这些类型的拖拽。

override func awakeFromNib() {
    setup()
}

var acceptableTypes: Set<String> { 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值