提升iPad体验之 --- iOS Drag and Drop

Drag and Drop官网介绍

无论是应用内, 应用外, 都能拖拽一张图片或者一段文字直接插入任何视图. 这是一个非常提升用户体验的的feature.

官方dev文档

用户操作

用户操作流程如下, 分为两种将情况, 从应用内拖拽到应用内(同一篇文章中), 和 iPad分屏下的跨应用拖拽(应用外部).
可拖拽的对象: 文字, 图片, 链接

一. 在应用内部拖拽

  • 环境: iPhone / iPad 单开应用
  1. 用户点击长按, 选中item ( 一段文字或者一张图片, 或者一个链接. )
  2. 拖动item中, 光标跟随着手指移动.
  3. 释放item, item落在光标处.
  4. 删除之前的item所在的位置, 结束

二. 在应用外拖拽

  • 环境: iPad分屏
  1. 外部App点击长按, 选中item ( 一段文字或者一张图片, 或者一个链接. )
  2. 拖动item中,
  3. 移动到我们的App里面, 光标跟随着手指移动.
  4. 释放item, item落在光标处. 结束

UIDragItem

Drag必须实现的代理方法
数据类型必须遵循NSItemProviderWriting和NSItemProviderReading协议。系统已经默认实现了这两个协议的类有 NSString, NSAttributedString, NSURL, UIColor, UIImage。

- (NSArray *)dragInteraction:(UIDragInteraction *)interaction itemsForBeginningSession:(id)session {
    // 获取item    
    NSItemProvider *provider1 = [[NSItemProvider alloc] initWithObject:self.img.image];
    UIDragItem *dragItem1 = [[UIDragItem alloc] initWithItemProvider:provider1];
    
    return @[dragItem,dragItem1];
}

UIDragSession

处理session的关键点

  1. 获取当前屏幕的pt
    CGPoint pt = [session locationInView:self.view];
  1. 判断从内部或者外部拖入
    session.localDragSession

UIDropInteraction

处理释放

- (void)dropInteraction:(UIDropInteraction *)interaction performDrop:(id)session 

demo地址

你可能感兴趣的:(提升iPad体验之 --- iOS Drag and Drop)