手机截屏获取状态栏
2018-03-24 本文已影响11人
Rambo__
iOS方法中截屏中并没有状态栏,但是可以在UIView的+ (void)load
加载方法中去获取到。
新建一个UIView的分类,在.m文件中实现+ (void)load
方法通过runtime混淆方法去获取到状态栏,可以用一个静态的变量保存着状态栏View,下次截屏就可以把状态栏合成进去,网上有很多合成图片或者合成View的方法。
#import "UIView+statusBar.h"
#import <objc/runtime.h>
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