iOS開(kāi)發(fā)中用到的一些方法總結(jié)

```

#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

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仔涩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子粘舟,更是在濱河造成了極大的恐慌熔脂,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柑肴,死亡現(xiàn)場(chǎng)離奇詭異霞揉,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)嘉抒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門零聚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)袍暴,“玉大人些侍,你說(shuō)我怎么就攤上這事≌#” “怎么了岗宣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)淋样。 經(jīng)常有香客問(wèn)我耗式,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任刊咳,我火速辦了婚禮彪见,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘娱挨。我一直安慰自己余指,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布跷坝。 她就那樣靜靜地躺著酵镜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柴钻。 梳的紋絲不亂的頭發(fā)上淮韭,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音贴届,去河邊找鬼靠粪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛毫蚓,可吹牛的內(nèi)容都是我干的庇配。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼绍些,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼捞慌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起柬批,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啸澡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后氮帐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嗅虏,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年上沐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了皮服。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡参咙,死狀恐怖龄广,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蕴侧,我是刑警寧澤择同,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站净宵,受9級(jí)特大地震影響敲才,放射性物質(zhì)發(fā)生泄漏裹纳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一紧武、第九天 我趴在偏房一處隱蔽的房頂上張望剃氧。 院中可真熱鬧,春花似錦阻星、人聲如沸她我。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)番舆。三九已至,卻和暖如春矾踱,著一層夾襖步出監(jiān)牢的瞬間恨狈,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工呛讲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留禾怠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓贝搁,卻偏偏與公主長(zhǎng)得像吗氏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子雷逆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容