BBASmartPositionProtocol.h
4.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
//
// BBASmartPositionProtocol.h
// BBASuspensionBall
//
// Created by Li,Xufeng on 2019/5/27.
// Copyright © 2019 Baidu. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <CoreGraphics/CoreGraphics.h>
NS_ASSUME_NONNULL_BEGIN
typedef NSString* BBASmartBallIdentifier;
@protocol BBASBSmartPositionDelegate <NSObject>
/**
安全边距变化后,悬浮球位置回传
@param identifier 注册悬浮球时返回的悬浮球唯一标识符 @see registerWithInitFrame:
@param frame 安全边距改变后的悬浮球位置,采用屏幕坐标系
注意:如果传回frame为CGrectZero,表示当前屏幕已充满悬浮球,无法规避位置,业务方需自行处理
*/
- (void)smartBall:(BBASmartBallIdentifier)identifier didChageSmartPosition:(CGRect)frame;
@end
@protocol BBASmartPositionProtocol <NSObject>
/**
注册悬浮球
@param idPrefix 浮球唯一标识符的参考前缀,TTS建议传入@"TTS",Feed悬浮窗建议传入“SUS”;可传入nil
@param delegate 事件回传代理:比如当接受到安全边距变化时,重新计算后的悬浮球位置将通过此delegate回传;当传入的 initFrame 与已注册的
其他球位置冲突时,此delegate也将回调
@return 悬浮球全局唯一标识符,nil表示注册失败(悬浮球数量达到限制阈值),业务方应当记录此标识,并在回调中判断是否是业务球
*/
- (nullable BBASmartBallIdentifier)registerWithidPrefix:(nullable NSString*)idPrefix delegate:(id<BBASBSmartPositionDelegate>)delegate ;
/**
触发悬浮球位置计算,通过delete回传位置,一般在调用registerWithidPrefix:delegate:后立即调用此方法,不与registerWithidPrefix:delegate:
合并为一个方法有特殊考虑,不用怀疑
@param identifier 注册悬浮球时返回的悬浮球唯一标识符 @see registerWithidPrefix:delegate:
@param initFrame 悬浮球初始位置,必须传入屏幕坐标系( 业务方使用
[ballView.superView convertRect:ballView.frame toView:[UIApplication sharedApplication].delegate.window )
*/
- (void)triggerSmartPositionForBall:(BBASmartBallIdentifier)identifier initFrame:(CGRect)initFrame;
/**
反注册悬浮球
@param identifier 注册悬浮球时返回的悬浮球唯一标识符 @see registerWithidPrefix:delegate:
@return 返回是否反注册成功,当注销一个未注册的identifier时返回NO,否则返回YES
*/
- (BOOL)unRegisterForBall:(BBASmartBallIdentifier)identifier;
/**
给定悬浮球的推荐位置
@param identifier 注册悬浮球时返回的悬浮球唯一标识符 @see registerWithidPrefix:delegate:
@return 悬浮球的坐标+大小,采用屏幕坐标系
*/
- (CGRect)smartPosForBall:(BBASmartBallIdentifier)identifier;
/**
检查给定的位置是否冲突
@param initFrame 给定位置,以[UIApplication sharedApplication].delegate.window 为坐标参考系
@param completeBlock 回传,conflict表示是否与已有悬浮球位置冲突,ballFrames回传当前所有球的位置,
以[UIApplication sharedApplication].delegate.window为坐标参考系
*/
- (void)checkConflictForFrame:(CGRect)initFrame completeBlock:(void (^)(BOOL conflict, NSArray<NSValue*> *ballFrames))completeBlock;
/**
悬浮球拖动结束后通知管理中心悬浮球新位置
@param identifier 注册悬浮球时返回的悬浮球唯一标识符 @see registerWithidPrefix:delegate:
@param stopFrame 手指离开屏幕时悬浮球停留的位置,以[UIApplication sharedApplication].delegate.window为坐标参考系
*/
- (void)touchMovedEndForBall:(nonnull BBASmartBallIdentifier)identifier stopFrame:(CGRect)stopFrame;
/**
排除给定悬浮球外其他所有悬浮球的位置
@param identifier 注册悬浮球时返回的悬浮球唯一标识符 @see registerWithidPrefix:delegate:
@return 除去identifier悬浮球外其他所有悬浮球的位置列表,位置参考屏幕坐标系
*/
- (nullable NSArray<NSValue*> *)positionsOfAllSmartBallsExclude:(nullable BBASmartBallIdentifier)identifier;
/**
通知冲突管理器安全区域变化,从dataSource拿最新的安全区域重新计算悬浮球位置,并通过delegate回传
*/
- (void)safeAreaDidChange;
@end
NS_ASSUME_NONNULL_END