美文网首页
手机截屏获取状态栏

手机截屏获取状态栏

作者: Rambo__ | 来源:发表于2018-03-24 19:32 被阅读11次

    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
    

    相关文章

      网友评论

          本文标题:手机截屏获取状态栏

          本文链接:https://www.haomeiwen.com/subject/xiqccftx.html