引
無論是應用內, 應用外, 都能拖拽一張圖片或者一段文字直接插入任何視圖. 這是一個非常提升用戶體驗的的feature.
用戶操作
用戶操作流程如下, 分為兩種將情況, 從應用內拖拽到應用內(同一篇文章中), 和 iPad分屏下的跨應用拖拽(應用外部).
可拖拽的對象: 文字, 圖片, 鏈接
一. 在應用內部拖拽
- 環(huán)境: iPhone / iPad 單開應用
- 用戶點擊長按, 選中item ( 一段文字或者一張圖片, 或者一個鏈接. )
- 拖動item中, 光標跟隨著手指移動.
- 釋放item, item落在光標處.
- 刪除之前的item所在的位置, 結束
二. 在應用外拖拽
- 環(huán)境: iPad分屏
- 外部App點擊長按, 選中item ( 一段文字或者一張圖片, 或者一個鏈接. )
- 拖動item中,
- 移動到我們的App里面, 光標跟隨著手指移動.
- 釋放item, item落在光標處. 結束
UIDragItem
Drag必須實現(xiàn)的代理方法
數(shù)據(jù)類型必須遵循NSItemProviderWriting和NSItemProviderReading協(xié)議。系統(tǒng)已經(jīng)默認實現(xiàn)了這兩個協(xié)議的類有 NSString, NSAttributedString, NSURL, UIColor, UIImage。
- (NSArray<UIDragItem *> *)dragInteraction:(UIDragInteraction *)interaction itemsForBeginningSession:(id<UIDragSession>)session {
// 獲取item
NSItemProvider *provider1 = [[NSItemProvider alloc] initWithObject:self.img.image];
UIDragItem *dragItem1 = [[UIDragItem alloc] initWithItemProvider:provider1];
return @[dragItem,dragItem1];
}
UIDragSession
處理session的關鍵點
- 獲取當前屏幕的pt
CGPoint pt = [session locationInView:self.view];
- 判斷從內部或者外部拖入
session.localDragSession
UIDropInteraction
處理釋放
- (void)dropInteraction:(UIDropInteraction *)interaction performDrop:(id<UIDropSession>)session