```
#import?YJCUtility
@interface YJCUtility : NSObject
/*
?*獲取應(yīng)用的window
?*/
+ (UIWindow *)getcurrentAppWindow;
/*
?*獲取view映射到window的rect
?*@prama view:需要映射的view
?*/
+ (CGRect)getRectToWindowWithView:(UIView *)view;
#pragma mark ----- json和字典的互轉(zhuǎn)
/*
?*數(shù)據(jù)轉(zhuǎn)成jsonString
?*/
+ (NSString *)objectTojsonString:(id)object;
/*!
?*@brief 把格式化的JSON格式的字符串轉(zhuǎn)換成字典
?*@param jsonString JSON格式的字符串
?*@return 返回字典
?*/
+ (id)dictionaryWithJsonString:(NSString *)jsonString;
//數(shù)組或者字典轉(zhuǎn)成JSON格式的字符串
+ (NSString *)dictionaryOrArrayToJson:(id)object;
//json轉(zhuǎn)字典或者數(shù)組
+ (id)toArrayOrNSDictionary:(NSData *)jsonData;
+ (NSData *)toJSONData:(id)theData;
#pragma mark - 文字的處理
/*
?*計(jì)算多行文字的高度
?*@param string 文本內(nèi)容
?*@param font? 字體大小
?*@return 返貨CGFloat類型
?*/
+ (CGFloat)heightWithTextString:(NSString *)string textWidth:(CGFloat)width textFont:(CGFloat)font;
//有個(gè)行間距
+ (CGFloat)heightWithTextString:(NSString *)string textWidth:(CGFloat)width lineSpacing:(CGFloat)lineSpa textFont:(CGFloat)font;
/*
?*計(jì)算一行文字的寬度
?*@param string 文本內(nèi)容
?*@param font 字體大小
?*@return 返回CGRect類型
?*/
+ (CGSize)WidthWithTextString:(NSString *)string textFont:(CGFloat)font;
/*
?*字符串用空格分隔
?*@param str 傳入的字符串
?*@param len 分隔的長(zhǎng)度
?*@return str 輸出分隔好的字符串
?*/
+ (NSString *)stringSeparateBySpaceString:(NSString *)str WithLenth:(NSInteger)len;
/*
?*移除字符串里的空格符
?*@param str傳入的字符串
?*@return 輸出分割好的字符串
?*/
+ (NSString *)stringRemoveSpaceWithString:(NSString *)str;
/*
?*判斷字符串中包含emoji表情
?*prama string待檢測(cè)的字符串
?*/
+ (BOOL)stringContainEmoji:(NSString *)string;
/*
?*判斷一個(gè)字符串是不是漢字晌区、數(shù)字和英文字母
?*@param newName待檢測(cè)的字符串
?*/
+ (BOOL)isRightName:(NSString *)newName;
#pragma mark ---- 電話號(hào)碼的處理
/*
?*把電話號(hào)碼的中間四位用*代替
?*/
+ (NSString *)starMobileWithMobile:(NSString *)mobile;
/*
?*判斷身份證號(hào)
?*/
+ (BOOL)isIdCardNo:(NSString *)identityCard;
//判斷一串?dāng)?shù)字是不是電話號(hào)碼
+ (BOOL)isMobileNumber:(NSString *)mobileNum;
#pragma mark ---- 銀行卡號(hào)的處理
/*
?*銀行卡獲取尾號(hào)后4位
?*/
+ (NSString *)getBankCarkLastNumber:(NSString *)cardNumber;
/**
?*? 銀行卡顯示前后四位癣疟,中間7個(gè)*代替
?*/
+ (NSString*) starBankCardWithCardNumber:(NSString*) cardNumber;
#pragma mark- 設(shè)備的屬性
//判斷是不是4或者4s的
+ (BOOL) isFour;
//判斷是不是plus
+ (BOOL) isPlus;
#pragma mark- 圖片處理
/*
?*圖片等比壓縮
?*壓縮后的圖片是正方形
?*@rama image:原圖 width:壓縮后的寬和高
?*/
+ (UIImage *)compressImage:(UIImage *)image Width:(CGFloat)width;
/**
?*? 圖片截取
?*? 截取后的圖片是正方形
?*? @prama image:原圖? mCGRect:截取的frame centerBool:是否從中間截取
?*/
+(UIImage*)getSubImage:(UIImage *)image mCGRect:(CGRect)mCGRect centerBool:(BOOL)centerBool;
/**
?*? 購(gòu)物車點(diǎn)擊的飛行動(dòng)畫(huà)
?*/
+ (void)flyAnimationWithStartPoint:(CGPoint)pos;
#pragma mark- 獲取當(dāng)前VC的方法
+ (UIViewController *)getCurrentVC;
#pragma mark- 時(shí)間轉(zhuǎn)換函數(shù)
/**
?*? NSDate轉(zhuǎn)成NSString
?*/
+ (NSString *)stringFenFromDate:(NSDate *)date;
/**
?*? dateStr(yyyy-MM-dd HH:mm:ss)轉(zhuǎn)成沒(méi)有秒(yyyy-MM-dd HH:mm:ss)
?*/
+ (NSString *)stringFenFromDateStr:(NSString *)dateStr;
/**
?* dateStr yyyy-MM-dd HH:mm:ss轉(zhuǎn)成yyyy.MM.dd
?*/
+ (NSString *)stringPoint1FromDateStr:(NSString *)dateStr;
/**
?* dateStr yyyy-MM-dd轉(zhuǎn)成yyyy.MM.dd
?*/
+ (NSString *)stringPoint2FromDateStr:(NSString *)dateStr;
/**
?*? 按照數(shù)字選取,無(wú)小數(shù)則取整數(shù)丈冬,有小數(shù)取兩位小數(shù)
?*/
+ (NSString *)stringWithDoubleValue:(double)value;
/**
?*? 按照數(shù)字選取,無(wú)小數(shù)則取整數(shù)吓揪,有小數(shù)取兩位小數(shù)
?*/
+ (NSString *)notRounding:(NSDecimalNumber *)price afterPoint:(NSInteger)position;
/**
?*? 保留一位小數(shù)
?*/
+ (NSString *)stringStyleOneWithValue:(double)value;
/*
?*截屏
?*/
+ (UIImage *)screenShotFromView:(UIView *)targetView;
//繪制虛線
+ (CALayer *)drawYAxsiLineStart:(CGPoint)start End:(CGPoint)end stroke:(UIColor *)stroke lineW:(CGFloat)width pw:(CGFloat)pw lw:(CGFloat)lw;
+ (CALayer *)drawYAxsiLineStart:(CGPoint)start End:(CGPoint)end;
@end
```
#define HK_DEBUG_LOG(...)? ? NSLog(__VA_ARGS__)
#define MAXFLOAT? ? 0x1.fffffep+127f
#define MainScreenSize_W? [[UIScreen mainScreen] bounds].size.width
#define MainScreenSize_H? [UIScreen mainScreen].bounds.size.height
#define UIColorFromRGBA(rgbValue, alphaValue) \
[UIColor \
colorWithRed:((float)((rgbValue &0xFF0000) >>16))/255.0\
green:((float)((rgbValue &0x00FF00) >>8))/255.0\
blue:((float)(rgbValue &0x0000FF))/255.0\
alpha:alphaValue]
/**
?*? app 主色調(diào) 黃色
?*/
#define kBaseColor? ? ? (UIColorFromRGBA(0xff9a00,1.0))
#import "YJCUtility.h"
#import
@implementation YJCUtility
//獲取應(yīng)用的window
+ (UIWindow *)getcurrentAppWindow
{
? ? UIWindow * window = window = [[UIApplication sharedApplication].windows objectAtIndex:0];
? ? returnwindow;
}
/**
?* 獲取view 映射到window上的rect
?* @prama view:需要影射的view
?*/
+ (CGRect)getRectToWindowWithView:(UIView *)view
{
? ? [[[[UIApplication sharedApplication] windows] objectAtIndex:0] makeKeyWindow];
? ? UIWindow * window = [UIApplication sharedApplication].keyWindow;
? ? if(!window) {
? ? ? ? window = [[UIApplication sharedApplication].windows objectAtIndex:0];
? ? }
? ? CGRect rect = [view convertRect:view.bounds toView:window];
? ? returnrect;
}
/*
?*數(shù)據(jù)轉(zhuǎn)成jsonString(比如字典轉(zhuǎn)成一個(gè)data串兒)
?*/
//舉例使用方法
/*
?*NSDictionary *dataDict = @{@"merchantId":[NSNumber numberWithInt:self.orderVeritifyModel.merchantId],
?? ? ? ? ? ? ? ? ? ? ? ? ? ? @"userId":userIdStr,
?? ? ? ? ? ? ? ? ? ? ? ? ? ? @"loginToken":[UserInfoManager sharedInstance].token,
?? ? ? ? ? ? ? ? ? ? ? ? ? ? @"userAddressId":[NSNumber numberWithLong:self.orderVeritifyModel.addressModel.addressId],
?? ? ? ? ? ? ? ? ? ? ? ? ? ? @"orderPayType":[NSNumber numberWithInt:_userSelectPayType],
?? ? ? ? ? ? ? ? ? ? ? ? ? ? @"expectedArrivalTime":_userSelectExpectedArrivalType
? ? ? ? ? ? ? ? ? ? ? ? ? ? };
?NSString *data = [MGJUtility objectTojsonString:dataDict];
?NSDictionary *mDict = @{@"latitude": @([UserLocationManager sharedInstance].userSettedLoction.latitude),
?? ? ? ? ? ? ? ? ? ? ? ? @"longitude": @([UserLocationManager sharedInstance].userSettedLoction.longitude),
?? ? ? ? ? ? ? ? ? ? ? ? @"data":data
? ? ? ? ? ? ? ? ? ? ? ? };
? NSDictionary *tmp_dict = @{@"params":mDict};
?*/
+ (NSString *)objectTojsonString:(id)object
{
? ? NSString * jsonString = [[NSString alloc] init];
? ? NSError * error;
? ? NSData * jsonData = [NSJSONSerialization dataWithJSONObject:object options:NSJSONWritingPrettyPrinted error:&error];
? ? if(!jsonData) {
? ? ? ? HK_DEBUG_LOG(@"error: %@", error);
? ? }
? ? else{
? ? ? ? jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
? ? }
? ? NSMutableString * mutStr = [NSMutableString stringWithString:jsonString];
? ? NSRange range = {0,jsonString.length};
? ? [mutStr replaceOccurrencesOfString:@" "
? ? ? ? ? ? ? ? ? ? ? ? ? ? withString:@""
? ? ? ? ? ? ? ? ? ? ? ? ? ? options:NSLiteralSearch range:range];
? ? NSRange range1 = {0,mutStr.length};
? ? [mutStr replaceOccurrencesOfString:@"\n"
? ? ? ? ? ? ? ? ? ? ? ? ? ? withString:@""
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? options:NSLiteralSearch range:range1];
? ? returnmutStr;
}
#pragma mark- json和字典的互轉(zhuǎn)函數(shù)
/*!
?*@brief 把格式化的JSON格式的字符串轉(zhuǎn)換成字典
?*@prama jsonString JSON格式的字符串
?*@return 返回字典
?*/
+ (id)dictionaryWithJsonString:(NSString *)jsonString
{
? ? if(jsonString ==nil|| jsonString.length ==0) {
? ? ? ? returnnil;
? ? }
? ? NSData * jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
? ? NSError * err;
? ? iddic = [NSJSONSerialization JSONObjectWithData:jsonData
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? options:NSJSONReadingMutableContainers
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? error:&err];
? ? if(err) {
? ? ? ? HK_DEBUG_LOG(@"json解析失敗:%@",err);
? ? ? ? returnnil;
? ? }
? ? returndic;
}
//數(shù)組或者字典轉(zhuǎn)成JSON格式的字符串
+ (NSString *)dictionaryOrArrayToJson:(id)object
{
? ? NSError * paraseError =nil;
? ? NSData * jsonData = [NSJSONSerialization dataWithJSONObject:object
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? options:NSJSONWritingPrettyPrinted
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? error:?seError];
? ? return[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
//json轉(zhuǎn)字典或者數(shù)組
+ (id)toArrayOrNSDictionary:(NSData *)jsonData
{
? ? NSError * error =nil;
? ? idjsonObject = [NSJSONSerialization JSONObjectWithData:jsonData
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? options:NSJSONReadingAllowFragments
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? error:&error];
? ? if(jsonObject !=nil&& error ==nil) {
? ? ? ? returnjsonObject;
? ? }else{
? ? ? ? //解析錯(cuò)誤
? ? ? ? returnnil;
? ? }
}
+ (NSData *)toJSONData:(id)theData
{
? ? NSError * err =nil;
? ? NSData * jsonData = [NSJSONSerialization dataWithJSONObject:theData
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? options:NSJSONWritingPrettyPrinted
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? error:&err];
? ? if([jsonData length] >0&& err ==nil) {
? ? ? ? returnjsonData;
? ? }else{
? ? ? ? returnnil;
? ? }
}
/*
?*計(jì)算多行文字的高度
?*@param string 文本內(nèi)容
?*@param font? 字體大小
?*@return 返貨CGFloat類型
?*/
+ (CGFloat)heightWithTextString:(NSString *)string textWidth:(CGFloat)width textFont:(CGFloat)font
{
? ? CGRect rect = [string boundingRectWithSize:CGSizeMake(width,10000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:font]}context:nil];
? ? returnrect.size.height +1;
}
+ (CGFloat)heightWithTextString:(NSString *)string textWidth:(CGFloat)width lineSpacing:(CGFloat)lineSpa textFont:(CGFloat)font
{
? ? NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
? ? paragraphStyle.lineSpacing = lineSpa;
? ? CGRect rect = [string boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:font],NSParagraphStyleAttributeName:paragraphStyle}context:nil];
? ? returnrect.size.height +1;
}
/*
?*計(jì)算一行文字的寬度
?*@param string 文本內(nèi)容
?*@param font 字體大小
?*@return 返回CGRect類型
?*/
+ (CGSize)WidthWithTextString:(NSString *)string textFont:(CGFloat)font
{
? ? CGSize size = [string sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:font]}];
? ? returnsize;
}
/*
?*字符串用空格分隔
?*@param str 傳入的字符串
?*@param len 分隔的長(zhǎng)度
?*@return str 輸出分隔好的字符串
?*/
+ (NSString *)stringSeparateBySpaceString:(NSString *)str WithLenth:(NSInteger)len
{
? ? if(str ==nil) {
? ? ? ? return@"";
? ? }
? ? NSMutableString * tmp_str = [[NSMutableString alloc] initWithString:str];
? ? NSInteger index = len;
? ? while(tmp_str.length > index) {
? ? ? ? [tmp_str insertString:@" "atIndex:index];
? ? ? ? index += (len+1);
? ? }
? ? returntmp_str;
}
/*
?*移除字符串里的空格符
?*@param str傳入的字符串
?*@return 輸出分割好的字符串
?*/
+ (NSString *)stringRemoveSpaceWithString:(NSString *)str
{
? ? if(str ==nil) {
? ? ? ? return@"";
? ? }
? ? NSString * tmp_str = str;
? ? tmp_str = [tmp_str stringByReplacingOccurrencesOfString:@" "withString:@""];
? ? returntmp_str;
}
/*
?*判斷字符串中包含emoji表情
?*prama string待檢測(cè)的字符串
?*/
+ (BOOL)stringContainEmoji:(NSString *)string
{
? ? __blockBOOLreturnValue =NO;
? ? [string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *_Nullablesubstring, NSRange substringRange, NSRange enclosingRange,BOOL*_Nonnullstop) {
? ? ? ? constunichar hs = [substring characterAtIndex:0];
? ? ? ? if(0xd800) {
? ? ? ? ? ? if(0xd800<= hs && hs<=0xdbff) {
? ? ? ? ? ? ? ? if(substring.length >1) {
? ? ? ? ? ? ? ? ? ? constunichar ls =[substring characterAtIndex:1];
? ? ? ? ? ? ? ? ? ? constintuc = ((hs -0xd800) *0x400)+(ls-0xdc00) +0x10000;
? ? ? ? ? ? ? ? ? ? if(0x1d000<= uc && uc <=0x1f77f) {
? ? ? ? ? ? ? ? ? ? ? ? returnValue =YES;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }elseif(substring.length >1) {
? ? ? ? ? ? ? ? constunichar ls = [substring characterAtIndex:1];
? ? ? ? ? ? ? ? if(ls ==0x20e3) {
? ? ? ? ? ? ? ? ? ? returnValue =YES;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? if(0x2100<= hs && hs <=0x27ff) {
? ? ? ? ? ? ? ? ? ? returnValue =YES;
? ? ? ? ? ? ? ? }elseif(0x2B05<= hs && hs <=0x2b07) {
? ? ? ? ? ? ? ? ? ? returnValue =YES;
? ? ? ? ? ? ? ? }elseif(0x2934<= hs && hs <=0x2935) {
? ? ? ? ? ? ? ? ? ? returnValue =YES;
? ? ? ? ? ? ? ? }elseif(0x3297<= hs && hs <=0x3299) {
? ? ? ? ? ? ? ? ? ? returnValue =YES;
? ? ? ? ? ? ? ? }elseif(hs ==0xa9|| hs ==0xae|| hs ==0x303d|| hs ==0x3030|| hs ==0x2b55|| hs ==0x2b1c|| hs ==0x2b1b|| hs ==0x2b50) {
? ? ? ? ? ? ? ? ? ? returnValue =YES;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }];
? ? returnreturnValue;
}
/*
?*判斷一個(gè)字符串是不是漢字、數(shù)字和英文字母
?*@param newName待檢測(cè)的字符串
?*/
+ (BOOL)isRightName:(NSString *)newName
{
? ? //“^.{5}$”:表示任意1個(gè)長(zhǎng)度為5的字符串纱意;只能輸入由數(shù)字和26個(gè)英文字母組成的字符串^[A-Za-z0-9]+$(只能輸入漢字:”^[\u4e00-\u9fa5]{0,}$”)
? ? NSString * NAME =@"^[a-zA-Z0-9\u4e00-\u9fa5_]{1,30}$";
? ? NSPredicate * userName = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", NAME];
? ? if([userName evaluateWithObject:newName] ==YES) {
? ? ? ? returnYES;
? ? }else{
? ? ? ? returnNO;
? ? }
}
/*
?*把電話號(hào)碼的中間四位用*代替
?*/
+ (NSString *)starMobileWithMobile:(NSString *)mobile
{
? ? NSString * tmp_mobile = mobile;
? ? if(mobile.length >=7) {
? ? ? ? tmp_mobile = [tmp_mobile stringByReplacingCharactersInRange:NSMakeRange(3,4) withString:@"****"];
? ? }
? ? returntmp_mobile;
}
/*
?*判斷身份證號(hào)
?*/
+ (BOOL)isIdCardNo:(NSString *)identityCard
{
? ? BOOLflag;
? ? NSString *regex2 =@"^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)$";
? ? NSPredicate *identityCardPredicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex2];
? ? flag = [identityCardPredicate evaluateWithObject:identityCard];
? ? //如果通過(guò)該驗(yàn)證贸人,說(shuō)明身份證格式正確间景,但準(zhǔn)確性還需計(jì)算
? ? if(flag) {
? ? ? ? if(identityCard.length==18) {
? ? ? ? ? ? //將前17位加權(quán)因子保存在數(shù)組里
? ? ? ? ? ? NSArray * idCardWiArray =@[@"7",@"9",@"10",@"5",@"8",@"4",@"2",@"1",@"6",@"3",@"7",@"9",@"10",@"5",@"8",@"4",@"2"];
? ? ? ? ? ? //這是除以11后,可能產(chǎn)生的11位余數(shù)艺智、驗(yàn)證碼倘要,也保存成數(shù)組
? ? ? ? ? ? NSArray * idCardYArray =@[@"1",@"0",@"10",@"9",@"8",@"7",@"6",@"5",@"4",@"3",@"2"];
? ? ? ? ? ? //用來(lái)保存前17位各自乖以加權(quán)因子后的總和
? ? ? ? ? ? NSInteger idCardWiSum =0;
? ? ? ? ? ? for(inti =0;i <17;i++) {
? ? ? ? ? ? ? ? NSInteger subStrIndex = [[identityCard substringWithRange:NSMakeRange(i,1)] integerValue];
? ? ? ? ? ? ? ? NSInteger idCardWiIndex = [[idCardWiArray objectAtIndex:i] integerValue];
? ? ? ? ? ? ? ? idCardWiSum+= subStrIndex * idCardWiIndex;
? ? ? ? ? ? }
? ? ? ? ? ? //計(jì)算出校驗(yàn)碼所在數(shù)組的位置
? ? ? ? ? ? NSInteger idCardMod=idCardWiSum%11;
? ? ? ? ? ? //得到最后一位身份證號(hào)碼
? ? ? ? ? ? NSString * idCardLast= [identityCard substringWithRange:NSMakeRange(17,1)];
? ? ? ? ? ? //如果等于2,則說(shuō)明校驗(yàn)碼是10十拣,身份證號(hào)碼最后一位應(yīng)該是X
? ? ? ? ? ? if(idCardMod==2) {
? ? ? ? ? ? ? ? if([idCardLast isEqualToString:@"X"]||[idCardLast isEqualToString:@"x"]) {
? ? ? ? ? ? ? ? ? ? returnflag;
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? flag =? NO;
? ? ? ? ? ? ? ? ? ? returnflag;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }else? {
? ? ? ? ? ? ? ? //用計(jì)算出的驗(yàn)證碼與最后一位身份證號(hào)碼匹配封拧,如果一致,說(shuō)明通過(guò)夭问,否則是無(wú)效的身份證號(hào)碼
? ? ? ? ? ? ? ? if([idCardLast isEqualToString: [idCardYArray objectAtIndex:idCardMod]]) {
? ? ? ? ? ? ? ? ? ? returnflag;
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? flag =? NO;
? ? ? ? ? ? ? ? ? ? returnflag;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }else{
? ? ? ? ? ? flag =? NO;
? ? ? ? ? ? returnflag;
? ? ? ? }
? ? }else{
? ? ? ? returnflag;
? ? }
}
//判斷一串?dāng)?shù)字是不是電話號(hào)碼
+ (BOOL)isMobileNumber:(NSString *)mobileNum
{
? ? NSString * MOBILE =? @"^[1][3456789][0-9]{9}$";//普通手機(jī)號(hào)碼去年加上了166的號(hào)了
? ? NSString * PHS =@"^0(10|2[0-5789]|\\d{3})\\d{7,8}$";//座機(jī)或者小靈通
? ? NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];
? ? NSPredicate *regextestPHS = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", PHS];
? ? if([regextestmobile evaluateWithObject:mobileNum] ==YES) {
? ? ? ? returnYES;
? ? }elseif([regextestPHS evaluateWithObject:mobileNum] ==YES){
? ? ? ? returnYES;
? ? }else{
? ? ? ? returnNO;
? ? }
}
/*
?*銀行卡獲取尾號(hào)后4位
?*/
+ (NSString *)getBankCarkLastNumber:(NSString *)cardNumber
{
? ? NSString * tmp_str =@"";
? ? if(cardNumber.length >=4) {
? ? ? ? tmp_str = [cardNumber substringFromIndex:cardNumber.length -4];
? ? }
? ? returntmp_str;
}
/**
?*? 銀行卡顯示前后四位泽西,中間7個(gè)*代替
?*/
+ (NSString*) starBankCardWithCardNumber:(NSString*) cardNumber
{
? ? NSString *temp_str = cardNumber;
? ? if(cardNumber.length >=7) {
? ? ? ? temp_str = [temp_str stringByReplacingCharactersInRange:NSMakeRange(4, cardNumber.length-8) withString:@"*******"];
? ? }
? ? returntemp_str;
}
//判斷是不是4或者4s的根據(jù)屏幕寬判斷
+ (BOOL) isFour
{
? ? staticdispatch_once_t one;
? ? staticBOOLisFour =NO;
? ? dispatch_once(&one, ^{
? ? ? ? if(((NSInteger)MainScreenSize_H) %480==0&&((NSInteger)MainScreenSize_W) %320==0) {
? ? ? ? ? ? isFour =YES;
? ? ? ? }
? ? });
? ? returnisFour;
}
//判斷是不是plus
+ (BOOL) isPlus
{
? ? staticdispatch_once_t one;
? ? staticBOOLisPlus =NO;
? ? NSString * curIphoneType = [YJCUtility iphoneType];
? ? dispatch_once(&one, ^{
? ? ? ? if([curIphoneType isEqualToString:@"iPhone 6 Plus"]||
? ? ? ? ? ? [curIphoneType isEqualToString:@"iPhone 6s Plus"]||
? ? ? ? ? ? [curIphoneType isEqualToString:@"iPhone 7 Plus"]) {
? ? ? ? ? ? isPlus =YES;
? ? ? ? }
? ? });
? ? returnisPlus;
}
+ (NSString *)iphoneType
{
? ? structutsname systemInfo;
? ? uname(&systemInfo);
? ? NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
? ? if([platform isEqualToString:@"iPhone1,1"])return@"iPhone 2G";
? ? if([platform isEqualToString:@"iPhone1,2"])return@"iPhone 3G";
? ? if([platform isEqualToString:@"iPhone2,1"])return@"iPhone 3GS";
? ? if([platform isEqualToString:@"iPhone3,1"])return@"iPhone 4";
? ? if([platform isEqualToString:@"iPhone3,2"])return@"iPhone 4";
? ? if([platform isEqualToString:@"iPhone3,3"])return@"iPhone 4";
? ? if([platform isEqualToString:@"iPhone4,1"])return@"iPhone 4S";
? ? if([platform isEqualToString:@"iPhone5,1"])return@"iPhone 5";
? ? if([platform isEqualToString:@"iPhone5,2"])return@"iPhone 5";
? ? if([platform isEqualToString:@"iPhone5,3"])return@"iPhone 5c";
? ? if([platform isEqualToString:@"iPhone5,4"])return@"iPhone 5c";
? ? if([platform isEqualToString:@"iPhone6,1"])return@"iPhone 5s";
? ? if([platform isEqualToString:@"iPhone6,2"])return@"iPhone 5s";
? ? if([platform isEqualToString:@"iPhone7,1"])return@"iPhone 6 Plus";
? ? if([platform isEqualToString:@"iPhone7,2"])return@"iPhone 6";
? ? if([platform isEqualToString:@"iPhone8,1"])return@"iPhone 6s";
? ? if([platform isEqualToString:@"iPhone8,2"])return@"iPhone 6s Plus";
? ? if([platform isEqualToString:@"iPhone8,4"])return@"iPhone SE";
? ? if([platform isEqualToString:@"iPhone9,1"])return@"iPhone 7";
? ? if([platform isEqualToString:@"iPhone9,2"])return@"iPhone 7 Plus";
? ? if([platform isEqualToString:@"iPod1,1"])? return@"iPod Touch 1G";
? ? if([platform isEqualToString:@"iPod2,1"])? return@"iPod Touch 2G";
? ? if([platform isEqualToString:@"iPod3,1"])? return@"iPod Touch 3G";
? ? if([platform isEqualToString:@"iPod4,1"])? return@"iPod Touch 4G";
? ? if([platform isEqualToString:@"iPod5,1"])? return@"iPod Touch 5G";
? ? if([platform isEqualToString:@"iPad1,1"])? return@"iPad 1G";
? ? if([platform isEqualToString:@"iPad2,1"])? return@"iPad 2";
? ? if([platform isEqualToString:@"iPad2,2"])? return@"iPad 2";
? ? if([platform isEqualToString:@"iPad2,3"])? return@"iPad 2";
? ? if([platform isEqualToString:@"iPad2,4"])? return@"iPad 2";
? ? if([platform isEqualToString:@"iPad2,5"])? return@"iPad Mini 1G";
? ? if([platform isEqualToString:@"iPad2,6"])? return@"iPad Mini 1G";
? ? if([platform isEqualToString:@"iPad2,7"])? return@"iPad Mini 1G";
? ? if([platform isEqualToString:@"iPad3,1"])? return@"iPad 3";
? ? if([platform isEqualToString:@"iPad3,2"])? return@"iPad 3";
? ? if([platform isEqualToString:@"iPad3,3"])? return@"iPad 3";
? ? if([platform isEqualToString:@"iPad3,4"])? return@"iPad 4";
? ? if([platform isEqualToString:@"iPad3,5"])? return@"iPad 4";
? ? if([platform isEqualToString:@"iPad3,6"])? return@"iPad 4";
? ? if([platform isEqualToString:@"iPad4,1"])? return@"iPad Air";
? ? if([platform isEqualToString:@"iPad4,2"])? return@"iPad Air";
? ? if([platform isEqualToString:@"iPad4,3"])? return@"iPad Air";
? ? if([platform isEqualToString:@"iPad4,4"])? return@"iPad Mini 2G";
? ? if([platform isEqualToString:@"iPad4,5"])? return@"iPad Mini 2G";
? ? if([platform isEqualToString:@"iPad4,6"])? return@"iPad Mini 2G";
? ? if([platform isEqualToString:@"i386"])? ? ? return@"iPhone Simulator";
? ? if([platform isEqualToString:@"x86_64"])? ? return@"iPhone Simulator";
? ? returnplatform;
}
/*
?*圖片等比壓縮
?*壓縮后的圖片是正方形
?*@rama image:原圖 width:壓縮后的寬和高
?*/
+ (UIImage *)compressImage:(UIImage *)image Width:(CGFloat)width
{
? ? floatscaleSize = image.size.height / image.size.width;
? ? if(width ==240) {
? ? ? ? UIGraphicsBeginImageContext(CGSizeMake(240,240*scaleSize));
? ? ? ? [image drawInRect:CGRectMake(0,0,240,240*scaleSize)];
? ? }else{
? ? ? ? UIGraphicsBeginImageContext(CGSizeMake(720,720*scaleSize));
? ? ? ? [image drawInRect:CGRectMake(0,0,720,720*scaleSize)];
? ? }
? ? UIImage * scaleImage = UIGraphicsGetImageFromCurrentImageContext();
? ? UIGraphicsEndImageContext();
? ? returnscaleImage;
}
/**
?*? 圖片截取
?*? 截取后的圖片是正方形
?*? @prama image:原圖? mCGRect:截取的frame centerBool:是否從中間截取
?*/
+(UIImage*)getSubImage:(UIImage *)image mCGRect:(CGRect)mCGRect centerBool:(BOOL)centerBool
{
? ? /*如若centerBool為Yes則是由中心點(diǎn)取mCGRect范圍的圖片*/
? ? floatimgwidth = image.size.width;
? ? floatimgheight = image.size.height;
? ? floatviewwidth = mCGRect.size.width;
? ? floatviewheight = mCGRect.size.height;
? ? CGRect rect;
? ? if(centerBool)
? ? ? ? rect = CGRectMake((imgwidth-viewwidth)/2, (imgheight-viewheight)/2, viewwidth, viewheight);
? ? else{
? ? ? ? if(viewheight < viewwidth) {
? ? ? ? ? ? if(imgwidth <= imgheight) {
? ? ? ? ? ? ? ? rect = CGRectMake(0,0, imgwidth, imgwidth*viewheight/viewwidth);
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? floatwidth = viewwidth*imgheight/viewheight;
? ? ? ? ? ? ? ? floatx = (imgwidth - width)/2;
? ? ? ? ? ? ? ? if(x >0) {
? ? ? ? ? ? ? ? ? ? rect = CGRectMake(x,0, width, imgheight);
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? rect = CGRectMake(0,0, imgwidth, imgwidth*viewheight/viewwidth);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }else{
? ? ? ? ? ? if(imgwidth <= imgheight) {
? ? ? ? ? ? ? ? floatheight = viewheight*imgwidth/viewwidth;
? ? ? ? ? ? ? ? if(height < imgheight) {
? ? ? ? ? ? ? ? ? ? rect = CGRectMake(0,0, imgwidth, height);
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? rect = CGRectMake(0,0, viewwidth*imgheight/viewheight, imgheight);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? floatwidth = viewwidth*imgheight/viewheight;
? ? ? ? ? ? ? ? if(width < imgwidth) {
? ? ? ? ? ? ? ? ? ? floatx = (imgwidth - width)/2;
? ? ? ? ? ? ? ? ? ? rect = CGRectMake(x,0, width, imgheight);
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? rect = CGRectMake(0,0, imgwidth, imgheight);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? CGImageRef subImageRef = CGImageCreateWithImageInRect(image.CGImage, rect);
? ? CGRect smallBounds = CGRectMake(0,0, CGImageGetWidth(subImageRef), CGImageGetHeight(subImageRef));
? ? UIGraphicsBeginImageContext(smallBounds.size);
? ? CGContextRef context = UIGraphicsGetCurrentContext();
? ? CGContextDrawImage(context, smallBounds, subImageRef);
? ? UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];
? ? UIGraphicsEndImageContext();
? ? CGImageRelease(subImageRef);
? ? returnsmallImage;
}
/**
?*? 購(gòu)物車點(diǎn)擊的飛行動(dòng)畫(huà)//落點(diǎn)根據(jù)實(shí)際需求進(jìn)行修改
?*/
+ (void)flyAnimationWithStartPoint:(CGPoint)pos
{
? ? [selfdoCartAnimationFrom:CGPointMake(pos.x, pos.y) toPos:CGPointMake(28, MainScreenSize_H -22)];
}
+ (void) doCartAnimationFrom:(CGPoint)fromPos toPos:(CGPoint)toPos
{
? ? CALayer *layer = [[CALayer alloc] init];
? ? layer.frame = CGRectMake(10, MainScreenSize_H,20,20);
? ? layer.masksToBounds =YES;
? ? layer.cornerRadius =10;
? ? layer.backgroundColor = kBaseColor.CGColor;//kBaseColor主色調(diào)這里暫定的黃色,在宏定義里邊進(jìn)行修改
? ? UIWindow* window = [UIApplication sharedApplication].keyWindow;
? ? [window.layer addSublayer:layer];
? ? CAKeyframeAnimation *animation=[CAKeyframeAnimation animationWithKeyPath:@"position"];
? ? animation.duration =0.4f;
? ? animation.removedOnCompletion =YES;
? ? animation.fillMode = kCAFillModeRemoved;
? ? animation.repeatCount =1;// repeat forever
? ? animation.calculationMode = kCAAnimationCubicPaced;
? ? CGMutablePathRef curvedPath = CGPathCreateMutable();
? ? CGPathMoveToPoint(curvedPath,NULL, fromPos.x, fromPos.y);
? ? CGPathAddQuadCurveToPoint(curvedPath,NULL,112,184, toPos.x, toPos.y);
? ? animation.path = curvedPath;
? ? [layer addAnimation:animation forKey:nil];
? ? CGPathRelease(curvedPath);
? ? [layer performSelector:@selector(removeFromSuperlayer) withObject:nilafterDelay:0.4];
}
//獲取當(dāng)前VC的方法
+ (UIViewController *)getCurrentVC
{
? ? UIViewController * result =nil;
? ? UIWindow * window = [[UIApplication sharedApplication] keyWindow];
? ? if(window.windowLevel != UIWindowLevelNormal) {
? ? ? ? NSArray * windows = [[UIApplication sharedApplication] windows];
? ? ? ? for(UIWindow * tmpWininwindows) {
? ? ? ? ? ? if(tmpWin.windowLevel == UIWindowLevelNormal) {
? ? ? ? ? ? ? ? window = tmpWin;
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? UIView * frontView = [[window subviews] objectAtIndex:0];
? ? idnextResponder = [frontView nextResponder];
? ? if([nextResponder isKindOfClass:[UIViewController class]])
? ? ? ? result = nextResponder;
? ? else
? ? ? ? result = window.rootViewController;
? ? returnresult;
}
#pragma mark- 時(shí)間轉(zhuǎn)換函數(shù)
/**
?*? NSDate轉(zhuǎn)成NSString
?*/
+ (NSString *)stringFenFromDate:(NSDate *)date
{
? ? NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
? ? //zzz表示時(shí)區(qū)缰趋,zzz可以刪除捧杉,這樣返回的日期字符將不包含時(shí)區(qū)信息。
? ? [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
? ? NSString *destDateString = [dateFormatter stringFromDate:date];
? ? returndestDateString;
}
/**
?*? dateStr(yyyy-MM-dd HH:mm:ss)轉(zhuǎn)成沒(méi)有秒(yyyy-MM-dd HH:mm:ss)
?*/
+ (NSString *)stringFenFromDateStr:(NSString *)dateStr
{
? ? NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
? ? [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
? ? NSDate *date = [dateFormatter dateFromString:dateStr];
? ? return[YJCUtility stringFenFromDate:date];
}
/**
?* dateStr yyyy-MM-dd HH:mm:ss轉(zhuǎn)成yyyy.MM.dd
?*/
+ (NSString *)stringPoint1FromDateStr:(NSString *)dateStr
{
? ? NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
? ? [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
? ? NSDate *date = [dateFormatter dateFromString:dateStr];
? ? [dateFormatter setDateFormat:@"yyyy.MM.dd"];
? ? NSString *destDateString = [dateFormatter stringFromDate:date];
? ? returndestDateString;
}
/**
?* dateStr yyyy-MM-dd轉(zhuǎn)成yyyy.MM.dd
?*/
+ (NSString *)stringPoint2FromDateStr:(NSString *)dateStr
{
? ? NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
? ? [dateFormatter setDateFormat:@"yyyy-MM-dd"];
? ? NSDate *date = [dateFormatter dateFromString:dateStr];
? ? [dateFormatter setDateFormat:@"yyyy.MM.dd"];
? ? NSString *destDateString = [dateFormatter stringFromDate:date];
? ? returndestDateString;
}
/**
?*? 按照數(shù)字選取秘血,無(wú)小數(shù)則取整數(shù)味抖,有小數(shù)取兩位小數(shù)
?*/
+ (NSString *)stringWithDoubleValue:(double)value
{
? ? if(fmod(value,1)==0) {
? ? ? ? return[NSString stringWithFormat:@"%.0f",value];
? ? }elseif(fmod(value*10,1)==0) {
? ? ? ? return[NSString stringWithFormat:@"%.1f",value];
? ? }else{
? ? ? ? return[NSString stringWithFormat:@"%.2f",value];
? ? }
}
/**
?*@brief? 截取指定小數(shù)位的值
?*@prama? price需要轉(zhuǎn)化的數(shù)據(jù)
?*@prama? position有效小數(shù)位
?*@return? 截取后數(shù)據(jù)
?*/
+ (NSString *)notRounding:(NSDecimalNumber *)price afterPoint:(NSInteger)position
{
? ? NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:position raiseOnExactness:NOraiseOnOverflow:NOraiseOnUnderflow:NOraiseOnDivideByZero:NO];
? ? NSDecimalNumber *roundedOunces;
? ? roundedOunces = [price decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
? ? return[NSString stringWithFormat:@"%@",roundedOunces];
}
/*
?*截屏
?*/
+ (UIImage *)screenShotFromView:(UIView *)targetView
{
? ? // 背景圖片 總的大小
? ? CGSize size = [UIScreen mainScreen].bounds.size;
? ? UIGraphicsBeginImageContext(size);
? ? // 開(kāi)啟上下文,使用參數(shù)之后,截出來(lái)的是原圖(YES? 0.0 質(zhì)量高)
? ? UIGraphicsBeginImageContextWithOptions(size,YES,0.0);
? ? CGRect rect = CGRectMake(0,0, size.width, size.height);
? ? //注:iOS7以后renderInContext:由drawViewHierarchyInRect:afterScreenUpdates:替代
? ? [targetView drawViewHierarchyInRect:rect afterScreenUpdates:NO];
? ? UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
? ? // 千萬(wàn)記得,結(jié)束上下文(移除棧頂上下文)
? ? UIGraphicsEndImageContext();
? ? returnimage;
}
//繪制虛線-----pw是點(diǎn)的寬度point width;lw是空隙的寬度
+ (CALayer *)drawYAxsiLineStart:(CGPoint)start End:(CGPoint)end stroke:(UIColor *)stroke lineW:(CGFloat)width pw:(CGFloat)pw lw:(CGFloat)lw
{
? ? UIBezierPath * yAxisPath = [[UIBezierPath alloc] init];
? ? [yAxisPath moveToPoint:CGPointMake(start.x, start.y)];
? ? [yAxisPath addLineToPoint:CGPointMake(end.x, end.y)];
? ? CAShapeLayer * yAxisLayer = [CAShapeLayer layer];
? ? [yAxisLayer setLineDashPattern:[NSArray arrayWithObjects:[NSNumber numberWithInt:pw],[NSNumber numberWithInt:lw],nil]];// 設(shè)置線為虛線,數(shù)組的第一個(gè)值是點(diǎn)的寬度灰粮,第二個(gè)是空隙的寬度
? ? yAxisLayer.lineWidth = width;
? ? yAxisLayer.strokeColor = stroke.CGColor;
? ? yAxisLayer.path = yAxisPath.CGPath;
? ? returnyAxisLayer;
}
//舉例
+ (CALayer *)drawYAxsiLineStart:(CGPoint)start End:(CGPoint)end
{
? ? return[selfdrawYAxsiLineStart:start End:end stroke:UIColorFromRGBA(0xc5c5c5,1.0) lineW:0.5pw:1.5lw:2.0];
}
@end
```