手机截屏获取状态栏

iOS方法中截屏中并没有状态栏,但是可以在UIView的+ (void)load加载方法中去获取到。

新建一个UIView的分类,在.m文件中实现+ (void)load方法通过runtime混淆方法去获取到状态栏,可以用一个静态的变量保存着状态栏View,下次截屏就可以把状态栏合成进去,网上有很多合成图片或者合成View的方法。


#import "UIView+statusBar.h"
#import 

static UIView * kStatusView = nil;

@implementation UIView (statusBar)

+ (void)load{
    
    Class statusBarClass =  NSClassFromString(@"UIStatusBar");
    if (statusBarClass) {
        
        SEL originalSelector = @selector(setFrame:);
        SEL swizzledSelector = NSSelectorFromString([@"statusBar_" stringByAppendingString:NSStringFromSelector(originalSelector)]);
        
        Method originalMethod = class_getInstanceMethod(statusBarClass, originalSelector);
        Method swizzledMethod = class_getInstanceMethod(statusBarClass, swizzledSelector);
        
        if(class_addMethod(statusBarClass, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))){
            class_replaceMethod(statusBarClass, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
        }
        else{
            method_exchangeImplementations(originalMethod, swizzledMethod);
        }
    }
}

- (void)statusBar_setFrame:(CGRect)frame{
    [self statusBar_setFrame:frame];
    kStatusView = self;
}

+ (instancetype)statusBar{
    return kStatusView;
}

@end

你可能感兴趣的:(手机截屏获取状态栏)