//磁盤總大小
+ (CGFloat)diskofAllSizeMBytes{
CGFloat size = 0.0;
NSError* error;
NSDictionary* dic = [[NSFileManager defaultManager]attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
if (error) {
#ifdef DEBUG
NSLog(@"error : %@",error.localizedDescription);
#endif
}else{
NSNumber* number = [dic objectForKey:NSFileSystemSize];
size = [number floatValue]/1024/1024;
}
return size;
}
//磁盤可用空間
+ (CGFloat)diskofAllSizeMBytes{
CGFloat size = 0.0;
NSError* error;
NSDictionary* dic = [[NSFileManager defaultManager]attributesOfFileSystemForPath:NSHomeDirectory() error:&error];
if (error) {
#ifdef DEBUG
NSLog(@"error : %@",error.localizedDescription);
#endif
}else{
NSNumber* number = [dic objectForKey:NSFileSystemFreeSize];
size = [number floatValue]/1024/1024;
}
return size;
}
//獲取文件大小
+ (long long)fileSizeAtPath:(NSString *)filePath{
NSFileManager* fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:filePath]) {
return 0;
}
return [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];
}
//獲取文件夾下所有文件的大小
+ (long long)folderSizeAtPath:(NSString *)folderPath{
NSFileManager* fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:folderPath]) {
return 0;
}
NSEnumerator* filesEnumerator = [[fileManager subpathsAtPath:folderPath]objectEnumerator];
NSString* fileName;
long long folerSize = 0;
while ((fileName = [filesEnumerator nextObject]) != nil) {
NSString* filePath = [folderPath stringByAppendingPathComponent:fileName];
folerSize += [self fileSizeAtPath:filePath];
}
return folerSize;
}
//獲取文件大小
+ (long long)fileSizeAtPath:(NSString *)filePath{
NSFileManager* fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:filePath]) {
return 0;
}
return [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];
}
//獲取字符串(或漢字)首字母
+ (NSString *)firstCharacterWithString:(NSString *)string{
NSMutableString* str = [NSMutableString stringWithString:string];
//漢字轉英文
CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformMandarinLatin, NO);
CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformStripDiacritics, NO);
NSString* pingyin = [str capitalizedString];
return [pingyin substringToIndex:1];
}
//將字符串數組按照元素首字母順序進行排序
+ (NSDictionary *)dictionaryOrderByCharacterWithOriginalArray:(NSArray *)array{
if (array.count == 0) {
return nil;
}
for (id obj in array) {
if (![obj isKindOfClass:[NSString class]]) {
return nil;
}
}
UILocalizedIndexedCollation* indexedCollation = [UILocalizedIndexedCollation currentCollation];
NSMutableArray* objects = [NSMutableArray arrayWithCapacity:indexedCollation.sectionTitles.count];
//創建27個分組數組
for (int i = 0; i < indexedCollation.sectionTitles.count; i ++) {
NSMutableArray* obj = [NSMutableArray array];
[objects addObject:obj];
}
NSMutableArray* keys = [NSMutableArray arrayWithCapacity:objects.count];
//按照字母順序進行分組
NSInteger lastIndex = -1;
for (int i =0; i < array.count; i ++) {
NSInteger index = [indexedCollation sectionForObject:array[i] collationStringSelector:@selector(uppercaseString)];
[[objects objectAtIndex:index] addObject:array[i]];
lastIndex = index;
}
//去掉空數組
for (int i = 0; i < objects.count; i ++) {
NSMutableArray* obj = objects[i];
if (obj.count == 0) {
[objects removeObject:obj];
}
}
//獲取索引字母
for (NSMutableArray* obj in objects) {
NSString* str = obj[0];
NSString* key = [self firstCharacterWithString:str];
[keys addObject:key];
}
NSMutableDictionary* dic = [NSMutableDictionary dictionary];
[dic setObject:objects forKey:keys];
return dic;
}
//獲取字符串(或漢字)首字母
+ (NSString *)firstCharacterWithString:(NSString *)string{
NSMutableString* str = [NSMutableString stringWithString:string];
//漢字轉英文
CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformMandarinLatin, NO);
CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformStripDiacritics, NO);
NSString* pingyin = [str capitalizedString];
return [pingyin substringToIndex:1];
}
使用:
NSLog(@"%@",[[self class]dictionaryOrderByCharacterWithOriginalArray:@[@"guangzhou",@"shanghai",@"北京",@"henan"]]);
打印:
{
(
B,
G,
H,
S
) = (
(
"\U5317\U4eac"
),
(
guangzhou
),
(
henan
),
(
shanghai
)
);
}
//獲取當前時間
//format:@"yyyy-MM-dd HH:mm:ss"、@"yyyy年MM月dd日 HH時mm分ss秒"
+ (NSString* )currentDateWithFormat:(NSString *)format{
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:format];
return [dateFormatter stringFromDate:[NSDate date]];
}
/**
* 計算上次日期距離現在多久
*
* @param lastTime 上次日期(需要和格式對應)
* @param format1 上次日期格式
* @param currentTime 最近日期(需要和格式對應)
* @param format2 最近日期格式
*
* @return xx分鐘前、xx小時前、xx天前
*/
+ (NSString *)timeIntervalFromLastTime:(NSString *)lastTime lasetTimeFormat:(NSString *)format1 toCurrentTime:(NSString *)currentTime currentTimeFormat:(NSString *)format2{
//上次時間
NSDateFormatter* dateFormatter1 = [[NSDateFormatter alloc]init];
dateFormatter1.dateFormat = format1;
NSDate* lastDate = [dateFormatter1 dateFromString:lastTime];
//當前時間
NSDateFormatter* dateFormatter2 = [[NSDateFormatter alloc]init];
dateFormatter2.dateFormat = format2;
NSDate* currentDate = [dateFormatter2 dateFromString:currentTime];
return [self timeIntervalFromLastTime:lastDate toCurrentTime:currentDate];
}
+ (NSString *)timeIntervalFromLastTime:(NSDate *)lastTime toCurrentTime:(NSDate *)currentTime{
NSTimeZone* timeZone = [NSTimeZone systemTimeZone];
//上次時間
NSDate* lastDate = [lastTime dateByAddingTimeInterval:[timeZone secondsFromGMTForDate:lastTime]];
//當前時間
NSDate* currentDate = [currentTime dateByAddingTimeInterval:[timeZone secondsFromGMTForDate:currentTime]];
//時間間隔
NSInteger intevalTime = [currentDate timeIntervalSinceReferenceDate] - [lastDate timeIntervalSinceReferenceDate];
//秒、分、小時、天、月、日
NSInteger minutes = intevalTime/60;
NSInteger hours = intevalTime/60/60;
NSInteger day = intevalTime/60/60/24;
NSInteger mouth = intevalTime/60/60/24/30;
NSInteger years = intevalTime/60/60/24/30/365;
if (minutes <= 10) {
return @"剛剛";
}else if (minutes < 60){
return [NSString stringWithFormat:@"%ld分鐘前",(long)minutes];
}else if (hours < 24){
return [NSString stringWithFormat:@"%ld小時前",(long)hours];
}else if (day < 30){
return [NSString stringWithFormat:@"%ld天前",(long)day];
}else if (mouth < 12){
NSDateFormatter* df = [[NSDateFormatter alloc]init];
df.dateFormat = @"M月d日";
NSString* time = [df stringFromDate:lastDate];
return time;
}else if (years >= 1){
NSDateFormatter* df = [[NSDateFormatter alloc]init];
df.dateFormat = @"yyyy年M月d日";
NSString* time = [df stringFromDate:lastDate];
return time;
}
return @"";
}
使用:
NSLog(@"%@",[[self class]timeIntervalFromLastTime:@"2016年6月27日 15:50" lasetTimeFormat:@"yyyy年MM月dd日 HH:mm" toCurrentTime:@"2016/6/27 16:12" currentTimeFormat:@"yyyy/MM/dd HH:mm"]);
打印:
22分鐘前
//判斷手機號碼格式是否正確
+ (BOOL)valiMobile:(NSString *)mobile{
mobile = [mobile stringByReplacingOccurrencesOfString:@" " withString:@""];
if (mobile.length != 11) {
return NO;
}
NSString *phoneRegex = @"^((17[0-9])|(13[0-9])|(15[^4,\\D])|(18[0,0-9]))\\d{8}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex];
NSString *phoneRegex2=@"^1(47[0-9])\\d{7}$";
NSPredicate *phoneTest2=[NSPredicate predicateWithFormat:@"SELF MATCHES %@",phoneRegex2];
return [phoneTest evaluateWithObject:mobile]|[phoneTest2 evaluateWithObject:mobile];
}
//判斷郵箱格式是否正確
+ (BOOL)isAvailableEmail:(NSString *)email{
NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";
NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", emailRegex];
return [emailTest evaluateWithObject:email];
}
#pragma mark -- 對圖片進行濾鏡處理
//name支持如下:
//懷舊-->CIPhotoEffectInstant
//單色-->CIPhotoEffectMono
//黑白-->CIPhotoEffectNoir
//褪色-->CIPhotoEffectFade
//色調-->CIPhotoEffectTonal
//沖印-->CIPhotoEffectProcess
//歲月-->CIPhotoEffectTransfer
//鉻黃-->CIPhotoEffectMono
+ (UIImage *)filterWithOriginalImage:(UIImage *)image filterName:(NSString *)name{
CIContext* context = [CIContext contextWithOptions:nil];
CIImage* inputImage = [[CIImage alloc]initWithImage:image];
//創建濾鏡
CIFilter* filter = [CIFilter filterWithName:name];
[filter setValue:inputImage forKey:kCIInputImageKey];
CIImage* result = [filter valueForKey:kCIOutputImageKey];
CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];
UIImage* resultImage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
return resultImage;
}
//CIGaussianBlur --->高斯模糊
//CIBoxBlur --->均值模糊(Available in iOS 9.0 and later)
//CIDiscBlur --->環形卷積模糊(Available in iOS 9.0 and later)
//CIMedianFilter --->中值模糊,用於消除圖像噪點,無需設置radius(Available in iOS 9.0 and later)
//CIMotionBlur --->運動模糊,用於模擬相機移動拍攝時的掃尾效果(Available in iOS 9.0 and later)
#pragma mark -- 對圖片進行模糊處理
+ (UIImage *)blurWithOriginalImage:(UIImage *)image blurName:(NSString *)name radius:(NSInteger)radius{
CIContext* context = [CIContext contextWithOptions:nil];
CIImage* inputImage = [[CIImage alloc]initWithImage:image];
CIFilter* filter;
if (name.length != 0) {
filter = [CIFilter filterWithName:name];
[filter setValue:inputImage forKey:kCIInputImageKey];
if (![name isEqualToString:@"CIMedianFilter"]) {
[filter setValue:@(radius) forKey:@"inputRadius"];
}
CIImage* result = [filter valueForKey:kCIOutputImageKey];
CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];
UIImage* resultImage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
return resultImage;
}else{
return nil;
}
}
/**
* 調整圖片飽和度、亮度、對比度
*
* @param image 目標圖片
* @param saturation 飽和度
* @param brightness 亮度: -1.0~1.0
* @param contrast 對比度
*
* @return 改變後圖片
*/
- (UIImage *)colorControlsWithOriginalImage:(UIImage *)image saturation:(CGFloat)saturation brightness:(CGFloat)brightness contrast:(CGFloat)contrast{
CIContext* context = [CIContext contextWithOptions:nil];
CIImage* inputImage = [[CIImage alloc]initWithImage:image];
CIFilter* filter = [CIFilter filterWithName:@"CIColorControls"];
[filter setValue:inputImage forKey:kCIInputImageKey];
[filter setValue:@(saturation) forKey:@"inputSaturation"];
[filter setValue:@(brightness) forKey:@"inputBrightness"];
[filter setValue:@(contrast) forKey:@"inputContrast"];
CIImage* result = [filter valueForKey:kCIOutputImageKey];
CGImageRef cgImage = [context createCGImage:result fromRect:[result extent]];
UIImage* resultImage = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
return resultImage;
}
//Avilable in iOS 8.0 and later
+ (UIVisualEffectView *)effectViewWithFrame:(CGRect)frame{
UIBlurEffect* effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView* effectView = [[UIVisualEffectView alloc]initWithEffect:effect];
effectView.frame = frame;
return effectView;
}
//全屏截圖
+ (UIImage *)shotWithView:(UIView *)view{
UIGraphicsBeginImageContext(view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
//全屏截圖
+ (UIImage *)shotWithView:(UIView *)view{
UIGraphicsBeginImageContext(view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
//截取view中某個區域生成一張圖片
+ (UIImage *)shotWithView:(UIView *)view scope:(CGRect)scope{
CGImageRef imageRef = CGImageCreateWithImageInRect([self shotWithView:view].CGImage, scope);
UIGraphicsBeginImageContext(scope.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect rect = CGRectMake(0, 0, scope.size.width, scope.size.height);
CGContextTranslateCTM(context, 0, rect.size.height);//下移
CGContextScaleCTM(context, 1.0f, -1.0f);//上翻
CGContextDrawImage(context, rect, imageRef);
UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGImageRelease(imageRef);
CGContextRelease(context);
return image;
}
//全屏截圖
+ (UIImage *)shotWithView:(UIView *)view{
UIGraphicsBeginImageContext(view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
//壓縮圖片到指定尺寸大小
+ (UIImage *)compressOriginalImage:(UIImage *)image toSize:(CGSize)size{
UIImage* resultImage = image;
UIGraphicsBeginImageContext(size);
[resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIGraphicsEndImageContext();
return resultImage;
}
//壓縮圖片到指定文件大小
+ (NSData *)compressOriginalImage:(UIImage *)image toMaxDataSizeKBytes:(CGFloat)size{
NSData* data = UIImageJPEGRepresentation(image, 1.0);
CGFloat dataKBytes = data.length/1000.0;
CGFloat maxQuality = 0.9f;
CGFloat lastData = dataKBytes;
while (dataKBytes > size &&maxQuality > 0.01f) {
maxQuality = maxQuality - 0.01f;
data = UIImageJPEGRepresentation(image, maxQuality);
CGFloat dataKBytes = data.length/1000.0;
if (lastData == dataKBytes) {
break;
}else{
lastData = dataKBytes;
}
}
return data;
}
需要先引入下頭文件
#import
#import
//獲取設備IP地址
+ (NSString *)getIPAddress{
NSString* address = @"error";
struct ifaddrs* interfaces = NULL;
struct ifaddrs* temp_addr = NULL;
int success = 0;
success = getifaddrs(&interfaces);
if (success == 0) {
temp_addr = interfaces;
while (temp_addr != NULL) {
if (temp_addr->ifa_addr->sa_family == AF_INET) {
if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
}
}
temp_addr = temp_addr->ifa_next;
}
}
freeifaddrs(interfaces);
return address;
}
//判斷字符串中是否含有空格
+ (BOOL)isHaceSpaceInString:(NSString *)string{
NSRange _range = [string rangeOfString:@" "];
if (_range.location != NSNotFound) {
return YES;
}
return NO;
}
//判斷字符串中是否含有某個字符串
+ (BOOL)isHaveString:(NSString *)string1 inString:(NSString *)string2{
NSRange _range = [string2 rangeOfString:string1];
if (_range.location != NSNotFound) {
return YES;
}
return NO;
}
//判斷字符串中是否含有中文
+ (BOOL)isHaveChineseInString:(NSString *)string{
for (NSInteger i = 0; i < [string length]; i ++) {
int a = [string characterAtIndex:i];
if (a > 0x4e00 && a < 0x9fff) {
return YES;
}
}
return NO;
}
//判斷字符串是否全部為數字
+ (BOOL)isAllNum:(NSString *)string{
unichar c;
for (int i = 0; i < [string length]; i ++) {
c = [string characterAtIndex:i];
if (!isdigit(c)) {
return NO;
}
}
return YES;
}