< UIKit >

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

上一篇 下一篇

猜你喜欢

热点阅读