240 发简信
IP属地:新疆
  • 翻了下老逻辑,大约是记住了当前调用过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];
    }

    关于代码截屏带状态栏的问题

    昨天产品经理告诉我,希望能实现仿网易严选那样,可以捕捉到用户的截屏操作,然后进行截屏分享的小功能。在实现的过程中遇到的最大问题就是截屏为什么没有状态栏???然后各种查找,资料...