
翻了下老逻辑,大约是记住了当前调用过setFrame的UIStatusBar的实例,+load里dispatch_once保证了是首个调用者,避免抓到上层consumer手动生成UIStatusBar被抓到
顺便阿里社招要不要了解一下
+ (UIView *)statusBarInstance_ComOpenThreadOTScreenshotHelper
{
return statusBarInstance;
}
+ (void)load
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Class statusBarClass = NSClassFromString(@"UIStatusBar");
[ComOpenThreadOTScreenshotHelperSwizzleHelper swizzClass:statusBarClass
selector:@selector(setFrame:)
selector:@selector(setFrameIntercept_ComOpenThreadOTScreenshotHelper:)];
[ComOpenThreadOTScreenshotHelperSwizzleHelper swizzClass:statusBarClass
selector:NSSelectorFromString(@"dealloc")
selector:@selector(deallocIntercept_ComOpenThreadOTScreenshotHelper)];
});
}
- (void)setFrameIntercept_ComOpenThreadOTScreenshotHelper:(CGRect)frame
{
[self setFrameIntercept_ComOpenThreadOTScreenshotHelper:frame];
statusBarInstance = self;
}
- (void)deallocIntercept_ComOpenThreadOTScreenshotHelper
{
statusBarInstance = nil;
[self deallocIntercept_ComOpenThreadOTScreenshotHelper];
}
关于代码截屏带状态栏的问题昨天产品经理告诉我,希望能实现仿网易严选那样,可以捕捉到用户的截屏操作,然后进行截屏分享的小功能。在实现的过程中遇到的最大问题就是截屏为什么没有状态栏???然后各种查找,资料...