UIDropInteraction.h
2019-06-24 本文已影响0人
zhYx_
#if USE_UIKIT_PUBLIC_HEADERS || !__has_include(<UIKitCore/UIDropInteraction.h>)
//
// UIDropInteraction.h
// UIKit
//
// Copyright © 2017-�2018 Apple Inc. All rights reserved.
//
#import <UIKit/UIInteraction.h>
NS_ASSUME_NONNULL_BEGIN
@protocol UIDragAnimating, UIDropInteractionDelegate, UIDropSession;
@class UIDragItem, UITargetedDragPreview;
#pragma mark - 放置会话 Class
#pragma mark -
UIKIT_EXTERN API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(watchos, tvos) @interface UIDropInteraction : NSObject <UIInteraction>
#pragma mark |实例化|
- (instancetype)initWithDelegate:(id<UIDropInteractionDelegate>)delegate NS_DESIGNATED_INITIALIZER;
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
/// 代理
@property (nonatomic, nullable, readonly, weak) id<UIDropInteractionDelegate> delegate;
/// 是否同时处理多个放置会话(如果为YES,则在一个会话进入视图后其他会话将被忽略,直到第一个会话退出后另一个会话再次进入;默认:NO)
@property (nonatomic, assign) BOOL allowsSimultaneousDropSessions;
@end
/* 放置会话要执行的操作类型 <枚举> */
typedef NS_ENUM(NSUInteger, UIDropOperation) {
UIDropOperationCancel = 0, /// 取消放置操作(不传输任何数据;不会调用UIDropInteraction的 - dropInteraction:performDrop: 方法)
UIDropOperationForbidden = 1, /// 取消放置操作(此类型表示在特定时间和地点不允许执行放置操作;可能会使拖动图像上显示特殊符号)
UIDropOperationCopy = 2, /// 完成放置(正常的完成拖动-放置流程,并复制由拖动项表示的数据;会调用UIDropInteraction的 - dropInteraction:performDrop: 方法)
UIDropOperationMove = 3, /// 完成放置(正常的完成拖动-放置流程,并移动由拖动项表示的数据;只有UIDropSession的allowMoveOperation为YES时,才可使用此类型,否则将被视为UIDropOperationCancel;仅在同一个App中允许此操作)
} API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(watchos, tvos);
#pragma mark - 放置方案 Class
#pragma mark -
UIKIT_EXTERN API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(watchos, tvos) @interface UIDropProposal : NSObject <NSCopying>
#pragma mark |实例化|
- (instancetype)initWithDropOperation:(UIDropOperation)operation NS_DESIGNATED_INITIALIZER;
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
/// 放置会话要执行的操作类型
@property (nonatomic, readonly) UIDropOperation operation;
/// 是否开启精确放置(拖动系统可以使拖动点远离触摸移动,以便更容易放置在精确位置)
@property (nonatomic, getter=isPrecise) BOOL precise;
/// 是否要求以原始比例显示拖动的Item
@property (nonatomic) BOOL prefersFullSizePreview;
@end
///!!!: 代理 <协议>
API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(watchos, tvos) @protocol UIDropInteractionDelegate <NSObject>
@optional
#pragma mark |放置会话配置和生命周期|
// 拖动会话是否支持放置操作
- (BOOL)dropInteraction:(UIDropInteraction *)interaction canHandleSession:(id<UIDropSession>)session;
// 放置会话已移至drop interaction的视图中(拖动进入视图时调用)
- (void)dropInteraction:(UIDropInteraction *)interaction sessionDidEnter:(id<UIDropSession>)session;
// 放置会话已经更新
- (UIDropProposal *)dropInteraction:(UIDropInteraction *)interaction sessionDidUpdate:(id<UIDropSession>)session;
// 放置会话已移出drop interaction的视图(当拖动退出交互视图时调用)
- (void)dropInteraction:(UIDropInteraction *)interaction sessionDidExit:(id<UIDropSession>)session;
// 放置会话开始执行(此时可以从拖动会话中获取项目提供者数据)
- (void)dropInteraction:(UIDropInteraction *)interaction performDrop:(id<UIDropSession>)session;
// 放置会话已经完成(正常的完成拖动-放置流程)
- (void)dropInteraction:(UIDropInteraction *)interaction concludeDrop:(id<UIDropSession>)session;
// 放置会话已结束(无论何种原因结束拖动会话,都会执行此方法)
- (void)dropInteraction:(UIDropInteraction *)interaction sessionDidEnd:(id<UIDropSession>)session;
#pragma mark |放置会话相关动画|
// 放置预览动画将要执行(可自定义放置预览动画)
- (nullable UITargetedDragPreview *)dropInteraction:(UIDropInteraction *)interaction previewForDroppingItem:(UIDragItem *)item withDefault:(UITargetedDragPreview *)defaultPreview;
// 放置动画将要执行(可自定义放置动画)
- (void)dropInteraction:(UIDropInteraction *)interaction item:(UIDragItem *)item willAnimateDropWithAnimator:(id<UIDragAnimating>)animator;
@end
NS_ASSUME_NONNULL_END
#else
#import <UIKitCore/UIDropInteraction.h>
#endif