// // TouchAreaCacheManager.h // YuMi // // Created by AI Assistant on 2025/1/13. // #import #import NS_ASSUME_NONNULL_BEGIN /** * 缓存的触摸区域信息 */ @interface CachedTouchArea : NSObject @property (nonatomic, assign) CGRect bounds; // Banner 边界 @property (nonatomic, assign) CGRect interactiveBounds; // 可交互区域边界 @property (nonatomic, strong) id banner; // Banner 对象 @property (nonatomic, assign) NSTimeInterval lastUpdateTime; // 最后更新时间 - (instancetype)initWithBanner:(id)banner bounds:(CGRect)bounds interactiveBounds:(CGRect)interactiveBounds; @end /** * 触摸区域缓存管理器 * 负责缓存 Banner 的触摸区域信息,提供快速的空间查询功能 */ @interface TouchAreaCacheManager : NSObject /** * Banner 边界缓存 * Key: Banner 对象的指针地址字符串 * Value: CachedTouchArea 对象 */ @property (nonatomic, strong, readonly) NSMutableDictionary *bannerBoundsCache; /** * 可交互区域列表 */ @property (nonatomic, strong, readonly) NSMutableArray *interactiveAreas; /** * 缓存是否启用 */ @property (nonatomic, assign) BOOL cacheEnabled; /** * 单例方法 */ + (instancetype)sharedManager; /** * 更新 Banner 的边界信息 * @param bounds Banner 的边界 * @param interactiveBounds Banner 的可交互区域边界 * @param banner Banner 对象 */ - (void)updateBannerBounds:(CGRect)bounds interactiveBounds:(CGRect)interactiveBounds forBanner:(id)banner; /** * 检查指定点是否在可交互区域内 * @param point 要检查的点 * @return 是否在可交互区域内 */ - (BOOL)isPointInInteractiveArea:(CGPoint)point; /** * 获取指定点所在的 Banner * @param point 要检查的点 * @return Banner 对象,如果不在任何 Banner 内则返回 nil */ - (nullable id)bannerAtPoint:(CGPoint)point; /** * 移除指定 Banner 的缓存 * @param banner Banner 对象 */ - (void)removeBannerFromCache:(id)banner; /** * 清空所有缓存 */ - (void)clearCache; /** * 获取缓存统计信息 * @return 统计信息字符串 */ - (NSString *)cacheStatistics; /** * 调试方法:打印缓存内容 */ - (void)debugPrintCache; @end NS_ASSUME_NONNULL_END