![240](https://cdn2.jianshu.io/assets/default_avatar/8-a356878e44b45ab268a3b0bbaaadeeb7.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240)
翻了下老邏輯,大約是記住了當(dāng)前調(diào)用過(guò)setFrame的UIStatusBar的實(shí)例,+load里dispatch_once保證了是首個(gè)調(diào)用者衷敌,避免抓到上層consumer手動(dòng)生成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];
}
關(guān)于代碼截屏帶狀態(tài)欄的問(wèn)題昨天產(chǎn)品經(jīng)理告訴我,希望能實(shí)現(xiàn)仿網(wǎng)易嚴(yán)選那樣,可以捕捉到用戶的截屏操作肺樟,然后進(jìn)行截屏分享的小功能。在實(shí)現(xiàn)的過(guò)程中遇到的最大問(wèn)題就是截屏為什么沒(méi)有狀態(tài)欄逻淌?么伯??然后各種查找卡儒,資料...