iOS-常用工具類(隨時(shí)更新)

自己整理了一個(gè)常用的工具類,歡迎大家吐槽~

↓↓↓↓↓↓

#pragma mark - NSString字符串

// 判斷字符串為空
+ (BOOL)isEmptyOrNull:(NSString *)string
{
    if (string == nil)
    {
        return YES;
    }
    if (string == NULL)
    {
        return YES;
    }
    if ([string isKindOfClass:[NSNull class]])
    {
        return YES;
    }
    if ([string isEqualToString:@""])
    {
        return YES;
    }
    if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0)
    {
        return YES;
    }
    return NO;
}

// 檢查字符串是否是純數(shù)字
+ (BOOL)checkStringIsOnlyDigital:(NSString *)str
{
   NSString *string = [str stringByTrimmingCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]];
    if(string.length >0)
    {
        return NO;
    }else return YES;
}

//檢查字符串是否為nil 轉(zhuǎn)為@""
+ (NSString *)checkStringValue:(id)str
{
    if ([str isKindOfClass:[NSNull class]]) {
        return @"";
    }
    return str;
}

//判斷字符串中包含漢字
+ (BOOL)checkStringIsContainerChineseCharacter:(NSString *)string
{
    for (int i = 0; i < string.length; i++)
    {
        int a = [string characterAtIndex:i];
        if (a >= 0x4e00 && a <= 0x9fff) {
            return YES;
        }
    }
    return NO;
}

//過濾特殊字符串
+ (NSString *)filterSpecialString:(NSString *)string
{
    NSCharacterSet *dontWant = [NSCharacterSet characterSetWithCharactersInString:@"[]{}(#%-*+=_)\\|~(<>$%^&*)_+,.;':|/@!? "];
    //stringByTrimmingCharactersInSet只能去掉首尾的特殊字符串
    return [[[string componentsSeparatedByCharactersInSet:dontWant] componentsJoinedByString:@""] stringByReplacingOccurrencesOfString:@"\n" withString:@""];
}


#pragma mark - 字符串size

/**
 *  計(jì)算字符串尺寸
 *
 *  @param string
 *  @param font   字體
 *  @param size
 *
 *  @return
 */
+ (CGSize)sizeWithString:(NSString *)string font:(UIFont *)font size:(CGSize)size
{
    NSDictionary *dic = @{NSFontAttributeName:font};
    return [string boundingRectWithSize:size options:(NSStringDrawingUsesLineFragmentOrigin) attributes:dic context:nil].size;
}

#pragma mark - UIColor

+ (UIColor *)colorFromHexCode:(NSString *)hexString
{
    if (!hexString) {
        return [UIColor clearColor];
    }
    NSString *cleanString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""];
    if([cleanString length] == 3) {
        cleanString = [NSString stringWithFormat:@"%@%@%@%@%@%@",
                       [cleanString substringWithRange:NSMakeRange(0, 1)],[cleanString substringWithRange:NSMakeRange(0, 1)],
                       [cleanString substringWithRange:NSMakeRange(1, 1)],[cleanString substringWithRange:NSMakeRange(1, 1)],
                       [cleanString substringWithRange:NSMakeRange(2, 1)],[cleanString substringWithRange:NSMakeRange(2, 1)]];
    }
    if([cleanString length] == 6) {
        cleanString = [cleanString stringByAppendingString:@"ff"];
    }
    
    unsigned int baseValue;
    [[NSScanner scannerWithString:cleanString] scanHexInt:&baseValue];
    
    float red = ((baseValue >> 24) & 0xFF)/255.0f;
    float green = ((baseValue >> 16) & 0xFF)/255.0f;
    float blue = ((baseValue >> 8) & 0xFF)/255.0f;
    float alpha = ((baseValue >> 0) & 0xFF)/255.0f;
    
    return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}

//從圖片轉(zhuǎn)到顏色
+ (UIColor *)colorFromImage:(UIImage *)image
{
    if (image == nil)
    {
        return [UIColor clearColor];
    } else {
        return [UIColor colorWithPatternImage:image];
    }
}


#pragma mark - UIImage
//從顏色生成圖片
+ (UIImage *)imageFromUIColor:(UIColor *)color {
    if (!color) {
        color = [UIColor clearColor];
    }
    CGRect rect = CGRectMake(0, 0, 1, 1);
    // create a 1 by 1 pixel context
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
    [color setFill];
    UIRectFill(rect);
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

#pragma mark - 壓縮圖片
// 壓縮圖片按照大小
+ (UIImage *)image:(UIImage *)image scaleToSize:(CGSize)size
{
    CGImageRef imgRef = image.CGImage;
    CGSize originSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef)); // 原始大小
    if (CGSizeEqualToSize(originSize, size)) {
        return image;
    }
    UIGraphicsBeginImageContextWithOptions(size, NO, 0);            //[UIScreen mainScreen].scale
    CGContextRef context = UIGraphicsGetCurrentContext();
    /**
     *  設(shè)置CGContext集插值質(zhì)量
     *  kCGInterpolationHigh 插值質(zhì)量高
     */
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    [image drawInRect:CGRectMake(0, 0, size.width, size.height)];
    UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return scaledImage;
}

// 壓縮圖片按照比例
+ (UIImage *)image:(UIImage *)image scaleWithRatio:(CGFloat)ratio
{
    CGImageRef imgRef = image.CGImage;
    if (ratio > 1 || ratio <= 0) {
        return image;
    }
    CGSize size = CGSizeMake(CGImageGetWidth(imgRef) * ratio, CGImageGetHeight(imgRef) * ratio); // 縮放后大小
    return [self image:image scaleToSize:size];
}

#pragma mark - 添加水印
+ (UIImage *)image:(UIImage *)img addLogo:(UIImage *)logo
{
    if (logo == nil ) {
        return img;
    }
    if (img == nil) {
        return nil;
    }
    //get image width and height
    int w = img.size.width;
    int h = img.size.height;
    int logoWidth = logo.size.width;
    int logoHeight = logo.size.height;
    
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    //create a graphic context with CGBitmapContextCreate
    CGContextRef context = CGBitmapContextCreate(NULL, w, h, 8, 44 * w, colorSpace, kCGImageAlphaPremultipliedFirst);
    CGContextDrawImage(context, CGRectMake(0, 0, w, h), img.CGImage);
    CGContextDrawImage(context, CGRectMake(w-logoWidth-15, 10, logoWidth, logoHeight), [logo CGImage]);
    CGImageRef imageMasked = CGBitmapContextCreateImage(context);
    UIImage *returnImage = [UIImage imageWithCGImage:imageMasked];
    CGContextRelease(context);
    CGImageRelease(imageMasked);
    CGColorSpaceRelease(colorSpace);
    return returnImage;
}

#pragma mark - NSUserDefault

// 取值
id UserDefaultGetObj(NSString *key)
{
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    return [ud objectForKey:key];
}

// 存入
void UserDefaultSetObjForKey(id object,NSString *key)
{
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    [ud setValue:object forKey:key];
    [ud synchronize];
}

// 移除
void UserDefaultRemoveObjForKey(NSString *key)
{
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    [ud removeObjectForKey:key];
    [ud synchronize];
}

// 清空
void UserDefaultClean()
{
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    [ud removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
    [ud synchronize];
}


#pragma mark - SandBox 沙盒相關(guān)

NSString *pathDocuments()
{
    return NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
}

NSString *pathCaches()
{
    return NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
}

/**
 *  Documents/name path
 *
 *  @param name
 *
 *  @return
 */
NSString *pathDocumentsWithFileName(NSString *name)
{
    return [pathDocuments() stringByAppendingString:name];
}

/**
 *  Caches/name path
 *
 *  @param name
 *
 *  @return
 */
NSString *pathCachesWithFileName(NSString *name)
{
    return [pathCaches() stringByAppendingString:name];
}


#pragma mark - 檢查手機(jī)號(hào)碼是否規(guī)范
/**
 *  檢查是否為正確手機(jī)號(hào)碼
 *
 *  @param phoneNumber 手機(jī)號(hào)
 *
 *  @return
 */
+ (BOOL)checkPhoneNumber:(NSString *)phoneNumber
{
    if (phoneNumber.length != 11)
    {
        return NO;
    }
    /**
     * 手機(jī)號(hào)碼:
     * 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[0, 1, 6, 7, 8], 18[0-9]
     * 移動(dòng)號(hào)段: 134,135,136,137,138,139,147,150,151,152,157,158,159,170,178,182,183,184,187,188
     * 聯(lián)通號(hào)段: 130,131,132,145,155,156,170,171,175,176,185,186
     * 電信號(hào)段: 133,149,153,170,173,177,180,181,189
     */
    NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|7[0135678]|8[0-9])\\d{8}$";
    /**
     * 中國(guó)移動(dòng):China Mobile
     * 134,135,136,137,138,139,147,150,151,152,157,158,159,170,178,182,183,184,187,188
     */
    NSString *CM = @"^1(3[4-9]|4[7]|5[0-27-9]|7[08]|8[2-478])\\d{8}$";
    /**
     * 中國(guó)聯(lián)通:China Unicom
     * 130,131,132,145,155,156,170,171,175,176,185,186
     */
    NSString *CU = @"^1(3[0-2]|4[5]|5[56]|7[0156]|8[56])\\d{8}$";
    /**
     * 中國(guó)電信:China Telecom
     * 133,149,153,170,173,177,180,181,189
     */
    NSString *CT = @"^1(3[3]|4[9]|53|7[037]|8[019])\\d{8}$";
    
    
    NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
    NSPredicate *regextestcm = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CM];
    NSPredicate *regextestcu = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CU];
    NSPredicate *regextestct = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", CT];
    
    if (([regextestmobile evaluateWithObject:phoneNumber] == YES)
        || ([regextestcm evaluateWithObject:phoneNumber] == YES)
        || ([regextestct evaluateWithObject:phoneNumber] == YES)
        || ([regextestcu evaluateWithObject:phoneNumber] == YES))
    {
        return YES;
    }
    else
    {
        return NO;
    }
}
#pragma mark - 檢查郵箱地址格式
/**
 *  檢查郵箱地址格式
 *
 *  @param EmailAddress 郵箱地址
 *
 *  @return
 */
+ (BOOL)checkEmailAddress:(NSString *)EmailAddress
{
    NSString *emailRegEx =
    @"(?:[a-z0-9!#$%\\&'*+/=?\\^_`{|}~-]+(?:\\.[a-z0-9!#$%\\&'*+/=?\\^_`{|}"
    @"~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\"
    @"x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-"
    @"z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5"
    @"]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-"
    @"9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21"
    @"-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";
    
    NSPredicate *regExPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegEx];
    
    //先把NSString轉(zhuǎn)換為小寫
    NSString *lowerString       = EmailAddress.lowercaseString;
    
    return [regExPredicate evaluateWithObject:lowerString] ;
}
#pragma mark - 身份證相關(guān)
/**
 *  判斷身份證是否合法
 *
 *  @param number 身份證號(hào)碼
 *
 *  @return
 */
+ (BOOL)checkIdentityNumber:(NSString *)number
{
    {
        //必須滿足以下規(guī)則
        //1. 長(zhǎng)度必須是18位或者15位,前17位必須是數(shù)字,第十八位可以是數(shù)字或X
        //2. 前兩位必須是以下情形中的一種:11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91
        //3. 第7到第14位出生年月日。第7到第10位為出生年份;11到12位表示月份,范圍為01-12;13到14位為合法的日期
        //4. 第17位表示性別,雙數(shù)表示女,單數(shù)表示男
        //5. 第18位為前17位的校驗(yàn)位
        //算法如下:
        //(1)校驗(yàn)和 = (n1 + n11) * 7 + (n2 + n12) * 9 + (n3 + n13) * 10 + (n4 + n14) * 5 + (n5 + n15) * 8 + (n6 + n16) * 4 + (n7 + n17) * 2 + n8 + n9 * 6 + n10 * 3,其中n數(shù)值,表示第幾位的數(shù)字
        //(2)余數(shù) = 校驗(yàn)和 % 11
        //(3)如果余數(shù)為0,校驗(yàn)位應(yīng)為1,余數(shù)為1到10校驗(yàn)位應(yīng)為字符串“0X98765432”(不包括分號(hào))的第余數(shù)位的值(比如余數(shù)等于3,校驗(yàn)位應(yīng)為9)
        //6. 出生年份的前兩位必須是19或20
        number = [number stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        number = [self filterSpecialString:number];
        //1??判斷位數(shù)
        if (number.length != 15 && number.length != 18) {
            return NO;
        }
        //2??將15位身份證轉(zhuǎn)為18位
        NSMutableString *mString = [NSMutableString stringWithString:number];
        if (number.length == 15) {
            //出生日期加上年的開頭
            [mString insertString:@"19" atIndex:6];
            //最后一位加上校驗(yàn)碼
            [mString insertString:[self getLastIdentifyNumberForIdentifyNumber:mString] atIndex:[mString length]];
            number = mString;
        }
        //3??開始判斷
        NSString *mmdd = @"(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8])))";
        NSString *leapMmdd = @"0229";
        NSString *year = @"(19|20)[0-9]{2}";
        NSString *leapYear = @"(19|20)(0[48]|[2468][048]|[13579][26])";
        NSString *yearMmdd = [NSString stringWithFormat:@"%@%@", year, mmdd];
        NSString *leapyearMmdd = [NSString stringWithFormat:@"%@%@", leapYear, leapMmdd];
        NSString *yyyyMmdd = [NSString stringWithFormat:@"((%@)|(%@)|(%@))", yearMmdd, leapyearMmdd, @"20000229"];
        //區(qū)域
        NSString *area = @"(1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5]|82|[7-9]1)[0-9]{4}";
        NSString *regex = [NSString stringWithFormat:@"%@%@%@", area, yyyyMmdd  , @"[0-9]{3}[0-9Xx]"];
        NSPredicate *regexTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];
        
        if (![regexTest evaluateWithObject:number]) {
            return NO;
        }
        //4??驗(yàn)證校驗(yàn)碼
        return [[self getLastIdentifyNumberForIdentifyNumber:number] isEqualToString:[number substringWithRange:NSMakeRange(17, 1)]];
    }
}
/**
 *  從身份證里面獲取性別man 或者 woman 不正確的身份證返回nil
 *
 *  @param number 身份證
 *
 *  @return
 */
+ (NSString *)getGenderFromIdentityNumber:(NSString *)number
{
    if ([self checkIdentityNumber:number]) {
        number = [self filterSpecialString:number];
        NSInteger i = [[number substringWithRange:NSMakeRange(number.length - 2, 1)] integerValue];
        if (i % 2 == 1) {
            return @"man";
        } else {
            return @"woman";
        }
    } else {
        return nil;
    }
}
/**
 *  從身份證獲取生日,身份證格式不正確返回nil,正確返回:1990年01月01日
 *
 *  @param number 身份證
 *
 *  @return
 */
+ (NSString *)getBirthdayFromIdentityNumber:(NSString *)number
{
    if ([self checkIdentityNumber:number]) {
        number = [self filterSpecialString:number];
        if (number.length == 18) {
            return [NSString stringWithFormat:@"%@年%@月%@日",[number substringWithRange:NSMakeRange(6,4)], [number substringWithRange:NSMakeRange(10,2)], [number substringWithRange:NSMakeRange(12,2)]];
        }
        if (number.length == 15) {
            return [NSString stringWithFormat:@"19%@年%@月%@日",[number substringWithRange:NSMakeRange(6,2)], [number substringWithRange:NSMakeRange(8,2)], [number substringWithRange:NSMakeRange(10,2)]];
        };
        return nil;
    } else {
        return nil;
    }
}

+ (NSString *)getLastIdentifyNumberForIdentifyNumber:(NSString *)number {
    //位數(shù)不小于17
    if (number.length < 17) {
        return nil;
    }
    //加權(quán)因子
    int R[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    //校驗(yàn)碼
    unsigned char sChecker[11] = {'1','0','X','9','8','7','6','5','4','3','2'};
    long p =0;
    for (int i =0; i<=16; i++){
        NSString * s = [number substringWithRange:NSMakeRange(i, 1)];
        p += [s intValue]*R[i];
    }
    //校驗(yàn)位
    int o = p%11;
    NSString *string_content = [NSString stringWithFormat:@"%c",sChecker[o]];
    return string_content;
}

#pragma mark - JSON和字典、數(shù)組
/**
 *  JSON字符串轉(zhuǎn)字典或者數(shù)組
 *
 *  @param string JSON字符串
 *
 *  @return 返回字典或者數(shù)組
 */
id JSONTransformToDictionaryOrArray(NSString *string)
{
    NSError *error;
    id object = [NSJSONSerialization JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:(NSJSONReadingMutableContainers) error:&error];
    if (error != nil) {
#ifdef DEBUG
        NSLog(@"fail to get dictioanry or array from JSON: %@, error: %@", string, error);
#endif
    }
    return object;
}

/**
 *  字典或者數(shù)組轉(zhuǎn)為JSON字符串
 *
 *  @param object 字典或者數(shù)組
 *
 *  @return 返回字符串
 */
NSString *dictionaryOrArrayTransformToString(id object)
{
    if (![object isKindOfClass:[NSArray class]] && ![object isKindOfClass:[NSDictionary class]])
    {
        return nil;
    }
    NSError *error;
    //options為0 則不會(huì)有換行符和空格   NSJSONWritingPrettyPrinted有空格和換行符方便閱讀
    NSData *data = [NSJSONSerialization dataWithJSONObject:object options:(0) error:&error];
    if (error != nil) {
#ifdef DEBUG
        NSLog(@"fail to get JSON from object: %@, error: %@", object, error);
#endif
    }
    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}


#pragma mark - 屏幕截圖的幾種方式

/**
 *  屏幕截圖有狀態(tài)欄
 *
 *  @param type 圖片保存位置
 *
 *  @return
 */
+ (UIImage *)imageWithScreenshotWithCaptureType:(CaptureType)type
{
    CGSize imageSize = [UIScreen mainScreen].bounds.size;
    UIGraphicsBeginImageContextWithOptions(imageSize, YES, 0);
    
    for (UIWindow *window in [UIApplication sharedApplication].windows) {
        if (window.screen == [UIScreen mainScreen]) {
            [window drawViewHierarchyInRect:[UIScreen mainScreen].bounds afterScreenUpdates:NO];
        }
    }
    UIView *statusBar = [[UIApplication sharedApplication] valueForKey:@"statusBar"];
    [statusBar drawViewHierarchyInRect:statusBar.bounds afterScreenUpdates:NO];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    [self saveImage:image WithCaptureType:type];

    return image;
}


/**
 *  屏幕截圖沒有狀態(tài)欄
 *
 *  @param type 圖片保存位置
 *
 *  @return
 */
+ (UIImage *)imageWithScreenshotNoStatusBarWithCaptureType:(CaptureType)type
{
    CGSize size = [UIScreen mainScreen].bounds.size;
    
    UIGraphicsBeginImageContextWithOptions(size, NO, 0);
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    for (UIWindow *window in [UIApplication sharedApplication].windows)
    {
        if (window.screen == [UIScreen mainScreen]) {
            CGContextSaveGState(context);
            CGContextTranslateCTM(context, window.center.x, window.center.y);
            CGContextConcatCTM(context, window.transform);
            CGContextTranslateCTM(context, -window.bounds.size.width *window.layer.anchorPoint.x, -window.bounds.size.height *window.layer.anchorPoint.y);
            [window.layer renderInContext:context];
            CGContextRestoreGState(context);
        }
        
    }
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    [self saveImage:image WithCaptureType:type];
    return image;
    
}

/**
 *  給一個(gè)view截圖
 *
 *  @param type 圖片保存位置
 *
 *  @return
 */
+ (UIImage *)imageForView:( UIView * _Nonnull )view withCaptureType:(CaptureType)type
{
    CGSize size = view.bounds.size;
    
    UIGraphicsBeginImageContextWithOptions(size, NO, 0);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [view.layer renderInContext:context];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    [self saveImage:image WithCaptureType:type];
    return image;
    
}

/**
 *  保存image到指定的位置
 *
 *  @param image image
 *  @param type  類型
 */
+ (void)saveImage:(UIImage *)image WithCaptureType:(CaptureType)type
{
    
    NSData *data = UIImagePNGRepresentation(image);
    /**
     *  時(shí)間戳
     */
    NSString *time =[NSString stringWithFormat:@"%.0f", [[NSDate date] timeIntervalSince1970]];
    switch (type) {
        case CaptureTypeSandbox:
        {
            [data writeToFile:pathCachesWithFileName([NSString stringWithFormat:@"%@_mainScrren_status.png",time]) atomically:YES];
        }
            break;
        case CaptureTypePhotes:
        {
            [data writeToFile:pathCachesWithFileName([NSString stringWithFormat:@"%@_mainScrren_status.png",time]) atomically:YES];
            
        }
            break;
        case CaptureTypeBoth:
        {
            [data writeToFile:pathCachesWithFileName([NSString stringWithFormat:@"%@_mainScrren_status.png",time]) atomically:YES];
            [data writeToFile:pathCachesWithFileName([NSString stringWithFormat:@"%@_mainScrren_status.png",time]) atomically:YES];
        }
            break;
        default:
            break;
    }
}

// 指定回調(diào)方法
+ (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
    NSString *msg = nil ;
#ifdef DEBUG
    if(error != NULL)
    {
        msg = @"保存圖片失敗" ;
    } else {
        msg = @"保存圖片成功" ;
    }
#endif
}

#pragma mark - 獲取當(dāng)前Controller
//獲取當(dāng)前屏幕顯示的viewcontroller
+ (UIViewController *)getCurrentVC
{
    UIViewController *result = nil;
    
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    if (window.windowLevel != UIWindowLevelNormal)
    {
        NSArray *windows = [[UIApplication sharedApplication] windows];
        for(UIWindow * tmpWin in windows)
        {
            if (tmpWin.windowLevel == UIWindowLevelNormal)
            {
                window = tmpWin;
                break;
            }
        }
    }
    UIView *frontView = [[window subviews] objectAtIndex:0];
    id nextResponder = [frontView nextResponder];
    
    if ([nextResponder isKindOfClass:[UIViewController class]])
        result = nextResponder;
    else
        result = window.rootViewController;
    
    return result;
}

+ (UIViewController *)findViewController:(UIView *)sourceView
{
    id target = sourceView;
    while (target) {
        target = ((UIResponder *)target).nextResponder;
        if ([target isKindOfClass:[UIViewController class]]) {
            break;
        }
    }
    return target;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評(píng)論 25 709
  • 追求理想的權(quán)利是否每個(gè)人都擁有,這個(gè)問題突然間盤亙?cè)谛闹袚]之不去。 理想和現(xiàn)實(shí)有交集但更多的是沖突,來到更廣闊的世...
    說書客閱讀 235評(píng)論 0 0
  • 前言: 對(duì)于一個(gè)大項(xiàng)目而言,最煩惱的就是在眾多界面難以找到對(duì)應(yīng)的viewController,要改個(gè)東西都要花好長(zhǎng)...
    chenfanfang閱讀 3,905評(píng)論 7 44
  • 1.組長(zhǎng)說今天沒急事不用上班了。我將此消息發(fā)給了另3位同事。小朱回復(fù)了。謝謝,謝謝,謝謝! 2.女友帶我去她買在東...
    ZZY710910閱讀 264評(píng)論 0 0
  • 天亮得早,小P孩兒六點(diǎn)不到就醒了。 不讓他那么早起,說:現(xiàn)在夏天,出太陽了才能起床,早上涼快,你抓緊時(shí)間多睡會(huì)哦。...
    天使姐姐簡(jiǎn)然閱讀 392評(píng)論 0 0

友情鏈接更多精彩內(nèi)容