Files
peko-ios/YuMi/Modules/YMRoom/View/AnimationView/TouchAreaCacheManager.h

106 lines
2.3 KiB
Objective-C

//
// TouchAreaCacheManager.h
// YuMi
//
// Created by AI Assistant on 2025/1/13.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
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