iOS项目开发中常用的工具方法
> 都是一些常用的工具,某些方法与自己的项目相关联了,未做具体整理. 方法均很简单实用.
### 代码块
VTGeneralTool.h文件如下a:
// VTGeneralTool.h
// SZDT_Partents
//
// Created by szdt on 15/3/23.
// Copyright (c) 2015年 szdt. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
@interface VTGeneralTool : NSObject
/**
* 检查非法字符和中文
*
* @param str
*
* @return
*/
+ (BOOL)checkNoChar:(NSString *)str;
/**
* 隐藏tabbar
*/
+ (void)hiddenTabBar;
/**
* 显示tabbar
*/
+ (void)showTabBar;
/**
* 检查电话号码合法性
*
* @param phoneNumber
*
* @return
*/
+ (BOOL)checkPhoneNumInput:(NSString *)phoneNumber;
/**
* 根据dict返回data
*
* @param dict
*
* @return
*/
+ (NSData*)returnDataWithDictionary:(NSDictionary*)dict;
/**
* 根据输入的日期 返回周几的字符串
*
* @param inputDate
*
* @return
*/
+ (NSString*)weekdayStringFromDate:(NSDate*)inputDate;
/**
* 获取今日日期
*
* @return
*/
+ (NSString *)getDate;
/**
* 获取当前周的日期数组
*
* @param date
*
* @return
*/
+ (NSArray *)getCurrentWeekDay:(NSDate *)date;
/**
* 计算当前路径下文件大小
*
* @param path
*
* @return
*/
+ (float)fileSizeAtPath:(NSString *)path;
/**
* 当前路径文件夹的大小
*
* @param path
*
* @return
*/
+ (float)folderSizeAtPath:(NSString *)path;
/**
* 清除文件
*
* @param path
*/
+ (void)clearCache:(NSString *)path;
/**
*POST 提交 并可以上传图片目前只支持单张
*/
+ (NSString *)postRequestWithURL: (NSString *)url // IN
postParems: (NSMutableDictionary *)postParems // IN 提交参数据集合
picFilePath: (NSString *)picFilePath // IN 上传图片路径
picFileName: (NSString *)picFileName; // IN 上传图片名称
/**
* 修发图片大小
*/
+ (UIImage *) imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize) newSize;
/**
* 保存图片
*/
+ (NSString *)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName;
/**
* 生成GUID
*/
+ (NSString *)generateUuidString;
/**
* 检查系统"照片"授权状态, 如果权限被关闭, 提示用户去隐私设置中打开.
*/
+ (BOOL)checkPhotoLibraryAuthorizationStatus;
/**
* 检查系统"相机"授权状态, 如果权限被关闭, 提示用户去隐私设置中打开.
*/
+ (BOOL)checkCameraAuthorizationStatus;
//百度转火星坐标
+ (CLLocationCoordinate2D )bdToGGEncrypt:(CLLocationCoordinate2D)coord;
//火星转百度坐标
+ (CLLocationCoordinate2D )ggToBDEncrypt:(CLLocationCoordinate2D)coord;
@end
实现代码如下
//
// VTGeneralTool.m
// SZDT_Partents
//
// Created by szdt on 15/3/23.
// Copyright (c) 2015年 szdt. All rights reserved.
//
#import "VTGeneralTool.h"
#import "SZHeader.h"
#import <AVFoundation/AVFoundation.h>
static NSString * const FORM_FLE_INPUT = @"file";
@interface VTGeneralTool ()<UIAlertViewDelegate>
@end
@implementation VTGeneralTool
+ (void)hiddenTabBar
{
AppDelegate *_app = (AppDelegate *)[UIApplication sharedApplication].delegate;
[UIView animateWithDuration:0.5 animations:^{
_app.tabBar.ground.frame=CGRectMake(0, kScreenH, kScreenW, kScreenH);
_app.tabBar.ground.hidden = YES;
_app.tabBar.dcPathButton.hidden = YES;
}];
}
+ (void)showTabBar
{
AppDelegate *_app = (AppDelegate *)[UIApplication sharedApplication].delegate;
[UIView animateWithDuration:0.5 animations:^{
_app.tabBar.ground.frame=CGRectMake(0, kScreenH-49, kScreenW, 49);
_app.tabBar.ground.hidden = NO;
_app.tabBar.dcPathButton.hidden = NO;
}];
}
+ (BOOL)checkNoChar:(NSString *)str
{
int alength = [str length];
for (int i = 0; i<alength; i++)
{
char commitChar = [str characterAtIndex:i];
NSString *temp = [str substringWithRange:NSMakeRange(i,1)];
const char *u8Temp = [temp UTF8String];
if (3==strlen(u8Temp)){
NSLog(@"字符串中含有中文");
return YES;
}else if((commitChar>64)&&(commitChar<91)){
NSLog(@"字符串中含有大写英文字母");
}else if((commitChar>96)&&(commitChar<123)){
NSLog(@"字符串中含有小写英文字母");
}else if((commitChar>47)&&(commitChar<58)){
NSLog(@"字符串中含有数字");
}else{
return YES;
NSLog(@"字符串中含有非法字符");
}
}
return NO;
}
+ (BOOL)checkPhoneNumInput:(NSString *)phoneNumber
{//检查电话号码
NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$";
// NSString * MOBILE = @"^(13[0-9]|14[0-9]|15[0-9]|18[0-9])\\d{8}$/i";
NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$";
NSString * CU = @"^1(3[0-2]|5[256]|8[56])\\d{8}$";
NSString * CT = @"^1((33|53|8[09])[0-9]|349)\\d{7}$";
// NSString * PHS = @"^0(10|2[0-5789]|\\d{3})\\d{7,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];
BOOL res1 = [regextestmobile evaluateWithObject:phoneNumber];
BOOL res2 = [regextestcm evaluateWithObject:phoneNumber];
BOOL res3 = [regextestcu evaluateWithObject:phoneNumber];
BOOL res4 = [regextestct evaluateWithObject:phoneNumber];
if (res1 || res2 || res3 || res4 )
{
return YES;
}
else
{
return NO;
}
}
+(NSData*)returnDataWithDictionary:(NSDictionary*)dict
{
NSMutableData* data = [[NSMutableData alloc]init];
NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
[archiver encodeObject:dict forKey:@"talkData"];
[archiver finishEncoding];
return data;
}
#pragma mark - 日期与字符串
+ (NSString *)getDate
{//得到今天日期的字符串
NSDate *senddate=[NSDate date];
NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"YYYY-MM-dd"];
NSString *locationString=[dateformatter stringFromDate:senddate];
NSLog(@"locationString:%@",locationString);
return locationString;
}
+ (NSString*)weekdayStringFromDate:(NSDate*)inputDate
{//将日期转换成周字符串
NSArray *weekdays = [NSArray arrayWithObjects: [NSNull null], @"周日", @"周一", @"周二", @"周三", @"周四", @"周五", @"周六", nil];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSTimeZone *timeZone = [[NSTimeZone alloc] initWithName:@"Asia/Shanghai"];
[calendar setTimeZone: timeZone];
NSCalendarUnit calendarUnit = NSCalendarUnitWeekday;
NSDateComponents *theComponents = [calendar components:calendarUnit fromDate:inputDate];
return [weekdays objectAtIndex:theComponents.weekday];
}
+ (NSArray *)getCurrentWeekDay:(NSDate *)date
{//获取当前周的日期数组
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitWeekday|NSCalendarUnitDay
fromDate:now];
// 得到星期几
// 1(星期天) 2(星期二) 3(星期三) 4(星期四) 5(星期五) 6(星期六) 7(星期天)
NSInteger weekDay = [comp weekday];
// 得到几号
NSInteger day = [comp day];
// 计算当前日期和这周的星期一和星期天差的天数
long firstDiff,lastDiff;
if (weekDay == 1)
{
firstDiff = 1;
lastDiff = 0;
}
else
{
firstDiff = [calendar firstWeekday] - weekDay;
lastDiff = 9 - weekDay;
}
// 在当前日期(去掉了时分秒)基础上加上差的天数
NSDateComponents *firstDayComp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
[firstDayComp setDay:day + firstDiff];
NSDate *firstDayOfWeek= [calendar dateFromComponents:firstDayComp];
NSDateComponents *lastDayComp = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:now];
[lastDayComp setDay:day + lastDiff];
NSDate *lastDayOfWeek= [calendar dateFromComponents:lastDayComp];
NSDateFormatter *formater = [[NSDateFormatter alloc] init];
[formater setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
return nil;
}
#pragma mark - 缓存清理工具
//计算单个文件大小
+(float)fileSizeAtPath:(NSString *)path
{
NSFileManager *fileManager=[NSFileManager defaultManager];
if([fileManager fileExistsAtPath:path]){
long long size=[fileManager attributesOfItemAtPath:path error:nil].fileSize;
return size/1024.0/1024.0;
}
return 0;
}
+(float)folderSizeAtPath:(NSString *)path
{
NSFileManager *fileManager=[NSFileManager defaultManager];
float folderSize;
if ([fileManager fileExistsAtPath:path]) {
NSArray *childerFiles=[fileManager subpathsAtPath:path];
for (NSString *fileName in childerFiles) {
NSString *absolutePath=[path stringByAppendingPathComponent:fileName];
folderSize +=[self fileSizeAtPath:absolutePath];
}
//SDWebImage框架自身计算缓存的实现
folderSize+=[[SDImageCache sharedImageCache] getSize]/1024.0/1024.0;
return folderSize;
}
return 0;
}
+(void)clearCache:(NSString *)path
{
NSFileManager *fileManager=[NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:path])
{
NSArray *childerFiles=[fileManager subpathsAtPath:path];
for (NSString *fileName in childerFiles)
{
//如有需要,加入条件,过滤掉不想删除的文件
NSString *absolutePath=[path stringByAppendingPathComponent:fileName];
[fileManager removeItemAtPath:absolutePath error:nil];
}
}
[[SDImageCache sharedImageCache] cleanDisk];
}
#pragma mark - 图片上传工具
+ (NSString *)postRequestWithURL: (NSString *)url // IN
postParems: (NSMutableDictionary *)postParems // IN
picFilePath: (NSString *)picFilePath // IN
picFileName: (NSString *)picFileName; // IN
{
NSString *TWITTERFON_FORM_BOUNDARY = @"0xKhTmLbOuNdArY";
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:10];
NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];
NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];
//得到图片的data
NSData* data;
if(picFilePath){
UIImage *image=[UIImage imageWithContentsOfFile:picFilePath];
//判断图片是不是png格式的文件
if (UIImagePNGRepresentation(image)) {
//返回为png图像。
data = UIImagePNGRepresentation(image);
}else {
//返回为JPEG图像。
data = UIImageJPEGRepresentation(image, 1.0);
}
}
//http body的字符串
NSMutableString *body=[[NSMutableString alloc]init];
//参数的集合的所有key的集合
NSArray *keys= [postParems allKeys];
//遍历keys
for(int i=0;i<[keys count];i++)
{
//得到当前key
NSString *key=[keys objectAtIndex:i];
//添加分界线,换行
[body appendFormat:@"%@\r\n",MPboundary];
//添加字段名称,换2行
[body appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];
//添加字段的值
[body appendFormat:@"%@\r\n",[postParems objectForKey:key]];
NSLog(@"添加字段的值==%@",[postParems objectForKey:key]);
}
if(picFilePath){
添加分界线,换行
[body appendFormat:@"%@\r\n",MPboundary];
//声明pic字段,文件名为boris.png
[body appendFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n",FORM_FLE_INPUT,picFileName];
//声明上传文件的格式
[body appendFormat:@"Content-Type: image/jpge,image/gif, image/jpeg, image/pjpeg, image/pjpeg\r\n\r\n"];
}
//声明结束符:--AaB03x--
NSString *end=[[NSString alloc]initWithFormat:@"\r\n%@",endMPboundary];
//声明myRequestData,用来放入http body
NSMutableData *myRequestData=[NSMutableData data];
//将body字符串转化为UTF8格式的二进制
[myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];
if(picFilePath){
//将image的data加入
[myRequestData appendData:data];
}
//加入结束符--AaB03x--
[myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];
//设置HTTPHeader中Content-Type的值
NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];
//设置HTTPHeader
[request setValue:content forHTTPHeaderField:@"Content-Type"];
//设置Content-Length
[request setValue:[NSString stringWithFormat:@"%lu", (unsigned long)[myRequestData length]] forHTTPHeaderField:@"Content-Length"];
//设置http body
[request setHTTPBody:myRequestData];
//http method
[request setHTTPMethod:@"POST"];
NSHTTPURLResponse *urlResponese = nil;
NSError *error = [[NSError alloc]init];
NSData* resultData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponese error:&error];
NSString* result= [[NSString alloc] initWithData:resultData encoding:NSUTF8StringEncoding];
if([urlResponese statusCode] >=200&&[urlResponese statusCode]<300)
{
NSLog(@"返回结果=====%@",result);
return result;
}
return nil;
}
/**
* 修图片大小
*/
+ (UIImage *) imageWithImageSimple:(UIImage*)image scaledToSize:(CGSize) newSize
{
newSize.height=image.size.height*(newSize.width/image.size.width);
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
/**
* 保存图片
*/
+ (NSString *)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName
{
NSData* imageData;
//判断图片是不是png格式的文件
if (UIImagePNGRepresentation(tempImage)) {
//返回为png图像。
imageData = UIImagePNGRepresentation(tempImage);
}else {
//返回为JPEG图像。
imageData = UIImageJPEGRepresentation(tempImage, 1.0);
}
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName];
NSArray *nameAry=[fullPathToFile componentsSeparatedByString:@"/"];
NSLog(@"===fullPathToFile===%@",fullPathToFile);
NSLog(@"===FileName===%@",[nameAry objectAtIndex:[nameAry count]-1]);
[imageData writeToFile:fullPathToFile atomically:NO];
return fullPathToFile;
}
/**
* 生成GUID
*/
+ (NSString *)generateUuidString{
// create a new UUID which you own
CFUUIDRef uuid = CFUUIDCreate(kCFAllocatorDefault);
// create a new CFStringRef (toll-free bridged to NSString)
// that you own
NSString *uuidString = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuid));
CFRelease(uuid);
return uuidString;
}
+ (BOOL)checkPhotoLibraryAuthorizationStatus
{
// if ([ALAssetsLibrary respondsToSelector:@selector(authorizationStatus)]) {
// ALAuthorizationStatus authStatus = [ALAssetsLibrary authorizationStatus];
// if (ALAuthorizationStatusDenied == authStatus ||
// ALAuthorizationStatusRestricted == authStatus) {
// [self showSettingAlertStr:@"请在iPhone的“设置->隐私->照片”中打开本应用的访问权限"];
// return NO;
// }
// }
return YES;
}
+ (BOOL)checkCameraAuthorizationStatus
{
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{
// kTipAlert(@"该设备不支持拍照");
return NO;
}
if ([AVCaptureDevice respondsToSelector:@selector(authorizationStatusForMediaType:)]) {
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if (AVAuthorizationStatusDenied == authStatus ||
AVAuthorizationStatusRestricted == authStatus) {
[self showSettingAlertStr:@"请在iPhone的“设置->隐私->相机”中打开本应用的访问权限"];
return NO;
}
}
return YES;
}
+ (void)showSettingAlertStr:(NSString *)tipStr{
//iOS8+系统下可跳转到‘设置’页面,否则只弹出提示窗即可
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"提示" message:tipStr delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"设置", nil];
[alert show];
}else{
// kTipAlert(@"%@", tipStr);
}
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 1)
{
UIApplication *app = [UIApplication sharedApplication];
NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([app canOpenURL:settingsURL])
{
[app openURL:settingsURL];
}
}
else
{
return;
}
}
//百度转火星坐标
+ (CLLocationCoordinate2D )bdToGGEncrypt:(CLLocationCoordinate2D)coord
{
double x = coord.longitude - 0.0065, y = coord.latitude - 0.006;
double z = sqrt(x * x + y * y) - 0.00002 * sin(y * M_PI);
double theta = atan2(y, x) - 0.000003 * cos(x * M_PI);
CLLocationCoordinate2D transformLocation ;
transformLocation.longitude = z * cos(theta);
transformLocation.latitude = z * sin(theta);
return transformLocation;
}
//火星坐标转百度坐标
+ (CLLocationCoordinate2D )ggToBDEncrypt:(CLLocationCoordinate2D)coord
{
double x = coord.longitude, y = coord.latitude;
double z = sqrt(x * x + y * y) + 0.00002 * sin(y * M_PI);
double theta = atan2(y, x) + 0.000003 * cos(x * M_PI);
CLLocationCoordinate2D transformLocation ;
transformLocation.longitude = z * cos(theta) + 0.0065;
transformLocation.latitude = z * sin(theta) + 0.006;
return transformLocation;
}
@end
都说一些常用的方法,又很多都说来自于网络,但由于时间过久,均找不到来源.