开发中常用方法总结

作为程序员,我想每个人在开发之前都喜欢封装一些简单的方法,加快自己开发的速度,我分享一些的�用到过得,不是什么高深的玩意,不是大牛,并没有装逼的技能,直接上代码,我一般都会建一个方法类

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface Methods : NSObject
//获取Storyboard上面的视图控制器
+ (UIViewController *)getVCWithIdentifier:(NSString *)theIdentifier andStoryboardName:(NSString *)theName;

/** 通过颜色来生成一个纯色图片 */
+ (UIImage *)imageFromColor:(UIColor *)color andCGRect:(CGRect)rect;
/*返回按钮*/
+ (void)setNavBarBack:(UIViewController *)theVC;
/*跳转视图控制器*/
+(void)push:(UIViewController *)theVC To:(UIViewController *)VC;
//移除数据
+ (void)removeUserInfoObject;
/** 保存数据 */
+ (void)saveAppInfo:(id) obj forKey:(NSString*) key;

/** 读取数据 */
+ (id)readAppInfoForKey:(NSString*) key;
//压缩图片
+ (NSData *)resetSizeOfImageData:(UIImage *)source_image maxSize:(NSInteger)maxSize;
/*设置边界*/
+(void)setBorder:(UIView *)theView andFloat:(float)theFloat andColor:(UIColor *)theColor;

/*调整图片角度,针对拍照对图片倾斜90是*/
+ (UIImage *)turnImageWithInfo:(NSDictionary<NSString *,id> *)info;
/*判断字符串为空*/
+ (BOOL)isEmptyWithString:(NSString *)string;

+ (NSString *)getImageURL:(NSString *)String;

+ (NSString *)toString:(id)anyObject;
/*自定义提示效果*/
+(void)showToast:(NSString *)theMsg andTime:(float)theTime;
/* 按钮倒计时*/
+ (void)openCountdown:(UIButton *)authCodeBtn;
/*截屏*/
+ (UIImage *)captureScreen ;
/*限制输入*/
+ (BOOL)validateChar:(NSString*)charStr andLimit:(NSString *)limitStr;
/**/
+ (CGSize)getAutoHeight:(NSString *)testStr andFontOfSize:(int)Size andExtrawidth:(float)width;
/*
 *功能说明:
 *    为了避免从网络上得到不是预期的字段而使得后续处理出现问题,而做的一个过滤
 *参数说明:
 *string : 需要过滤处理的字符串并去掉多余的空格等
 *defaultString : 不符合条件时的默认字符串
 */

+ (NSString *)getString:(NSString *)string withDefault:(NSString *)defaultString;
/* 为了避免从网络上得到不是预期的字段而使得后续处理出现问题,而做的一个过滤*/
+ (NSString *)getStringWithClear:(NSString *)string withDefault:(NSString *)defaultString;
+ (NSString *)clearExtraEntrtKey:(NSString *)string;

/**
 *  对应格式的表示时间的字符串转化为时间戳
 *  这里的格式是:YYYY-MM-dd HH:mm:ss
 *  @param str
 *
 *  @return
 */
+ (NSString *) getTimeFromString :(NSString *) str;

/**
 *  js的文字html化,防止在显示网页内容时出现乱码现象
 */
+ (NSString *)htmlEntityDecode: (NSString *)str;
@end

目前我只收录了这些方法

#import "Methods.h"

@implementation Methods

+ (UIViewController *)getVCWithIdentifier:(NSString *)theIdentifier andStoryboardName:(NSString *)theName {
  UIStoryboard *lStoryboard = [UIStoryboard storyboardWithName:theName bundle:[NSBundle mainBundle]];
  return   [lStoryboard instantiateViewControllerWithIdentifier:theIdentifier];
}



//通过颜色来生成一个纯色图片
+ (UIImage *)imageFromColor:(UIColor *)color andCGRect:(CGRect)rect {
  
  UIGraphicsBeginImageContext(rect.size);
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSetFillColorWithColor(context, [color CGColor]);
  CGContextFillRect(context, rect);
  UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return img;
}



+ (void)setNavBarBack:(UIViewController *)theVC {
  theVC.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"ic_fanhui"] style:UIBarButtonItemStylePlain target:theVC action:@selector(back:)];
  theVC.navigationItem.leftBarButtonItem.imageInsets=UIEdgeInsetsMake(0, -4, 0, 4);
}


- (void)back:(UIBarButtonItem *)item {
}
+(void)push:(UIViewController *)theVC To:(UIViewController *)VC{
  [theVC.navigationController pushViewController:VC animated:YES];
}
/*
*功能说明:
*    判断字符串为空
*参数说明:
*string : 需要判断的字符串
*/

#pragma mark - 移除用户信息
+ (void)removeUserInfoObject {
  [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"isLoggedIn"];
  //    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"TOKEN"];
  //    [[NSUserDefaults standardUserDefaults] removeObjectForKey:@"UID"];
}
#pragma mark - 保存数据
+ (void)saveAppInfo:(id) obj forKey:(NSString*) key {
  [[NSUserDefaults standardUserDefaults] setObject:obj forKey:key];
  [[NSUserDefaults standardUserDefaults] synchronize];
}

#pragma mark - 读取数据
+ (id)readAppInfoForKey:(NSString*) key {
  return [[NSUserDefaults standardUserDefaults] objectForKey:key];
}
#pragma mark - 压缩图片
+ (NSData *)resetSizeOfImageData:(UIImage *)source_image maxSize:(NSInteger)maxSize
{
  //先调整分辨率
  CGSize newSize = CGSizeMake(source_image.size.width, source_image.size.height);
  CGFloat tempHeight = newSize.height / 1024;
  CGFloat tempWidth = newSize.width / 1024;
  
  if (tempWidth > 1.0 && tempWidth > tempHeight) {
      newSize = CGSizeMake(source_image.size.width / tempWidth, source_image.size.height / tempWidth);
  }
  else if (tempHeight > 1.0 && tempWidth < tempHeight){
      newSize = CGSizeMake(source_image.size.width / tempHeight, source_image.size.height / tempHeight);
  }
  
  UIGraphicsBeginImageContext(newSize);
  [source_image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
  UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  
  //调整大小
  NSData *imageData = UIImageJPEGRepresentation(newImage,1.0);
  NSUInteger sizeOrigin = [imageData length];
  NSUInteger sizeOriginKB = sizeOrigin / 1024;
  if (sizeOriginKB > maxSize) {
      NSData *finallImageData = UIImageJPEGRepresentation(newImage,0.50);
      return finallImageData;
  }
  return imageData;
}
+(void)setBorder:(UIView *)theView andFloat:(float)theFloat andColor:(UIColor *)theColor{
  theView.layer.borderColor = theColor.CGColor;
  theView.layer.borderWidth = theFloat;
  [theView.layer setMasksToBounds:YES];
}
//调整图片角度
+ (UIImage *)turnImageWithInfo:(NSDictionary<NSString *,id> *)info {
  UIImage *image=[info objectForKey:UIImagePickerControllerOriginalImage];
  //类型为 UIImagePickerControllerOriginalImage 时调整图片角度
  NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
  if ([type isEqualToString:@"public.image"]) {
      UIImageOrientation imageOrientation=image.imageOrientation;
      if(imageOrientation!=UIImageOrientationUp) {
          // 原始图片可以根据照相时的角度来显示,但 UIImage无法判定,于是出现获取的图片会向左转90度的现象。
          UIGraphicsBeginImageContext(image.size);
          [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
          image = UIGraphicsGetImageFromCurrentImageContext();
          UIGraphicsEndImageContext();
      }
  }
  return image;
  
}
/*
*功能说明:
*    为了避免从网络上得到不是预期的字段而使得后续处理出现问题,而做的一个过滤
*参数说明:
*string : 需要过滤处理的字符串并去掉多余的空格等
*defaultString : 不符合条件时的默认字符串
*/
+ (NSString *)getString:(NSString *)string withDefault:(NSString *)defaultString{
  
  NSString * temStr;
  if (![string isKindOfClass:[NSString class]]) {
      temStr =  [Methods toString:string];
  }else{
      temStr = string;
  }
  if([Methods isEmptyWithString:temStr]
     ){
      //为空,返回默认数据
      return defaultString;
  }else{
      //不为空,直接返回数据
      return temStr;
  }
}
/*
*功能说明:
*    为了避免从网络上得到不是预期的字段而使得后续处理出现问题,而做的一个过滤
*参数说明:
*string : 需要过滤处理的字符串
*defaultString : 不符合条件时的默认字符串
*/
+ (NSString *)getStringWithClear:(NSString *)string withDefault:(NSString *)defaultString{
  
  if([Methods isEmptyWithString:string]
     ){
      //为空,返回默认数据
      return defaultString;
  }else{
      //不为空,直接返回数据
      return [self clearExtraEntrtKey:string];
  }
}
/*
*功能说明:
*    判断字符串为空
*参数说明:
*string : 需要判断的字符串
*/
+ (BOOL)isEmptyWithString:(NSString *)string{
  //    NSString *string = [theString stringByReplacingOccurrencesOfString:@" " withString:@""];
  return ((string == nil)
          ||([string isEqual:[NSNull null]])
          ||([string isEqualToString:@"<null>"])
          ||([string isEqualToString:@"(null)"])
          ||([string isEqualToString:@" "])
          ||([string isEqualToString:@""])
          ||([string isEqualToString:@""])
          ||([string isEqualToString:@"(\n)"])
          ||([string isEqualToString:@"yanyu"])
          );
}
+ (NSString *)clearExtraEntrtKey:(NSString *)string{
  NSString * mString = nil;
  NSString *strtemp = [string stringByReplacingOccurrencesOfString:@"\r" withString:@""];
  mString = [strtemp stringByReplacingOccurrencesOfString:@"\n" withString:@""];
  return mString;
}
#pragma mark - 获取图片url
+ (NSString *)getImageURL:(NSString *)String {
  if ([String containsString:@"http://"]) {
      return String;
  } else {
      return [NSString stringWithFormat:@"http://192.168.7.100/zxgs/%@",String];
  }
}
+ (NSString *)toString:(id)anyObject {
  return [NSString stringWithFormat:@"%@",anyObject];
}
+(void)showToast:(NSString *)theMsg andTime:(float)theTime{
  //内容
  UIWindow *window=[[UIApplication sharedApplication] keyWindow];
  NSDictionary *attribute = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:15.0f]};
  CGSize labelSize1=  [theMsg boundingRectWithSize:CGSizeMake(280, 5000) options:NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attribute context:nil].size;
  UILabel * patternLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(45,15, labelSize1.width, labelSize1.height)];
  patternLabel1.textAlignment=NSTextAlignmentCenter;
  patternLabel1.text = theMsg;
  patternLabel1.textColor=[UIColor whiteColor];
  patternLabel1.backgroundColor = [UIColor clearColor];
  patternLabel1.font = [UIFont fontWithName:@"HelveticaNeue" size:15.0f];
  patternLabel1.numberOfLines = 0;//
  patternLabel1.lineBreakMode = NSLineBreakByCharWrapping;//
  
  UIImageView *picView = [[UIImageView alloc]initWithFrame:CGRectMake(10, 10, 29, 26)];
  picView.image = [UIImage imageNamed:@"pic_renzhengchenggong"];
  picView.backgroundColor = [UIColor clearColor];
  float heightTS=labelSize1.height+20;
  float widthTS=labelSize1.width+20;
  
  UIView *viewTishi=[[UIView alloc]initWithFrame:CGRectMake(0, 0, widthTS+30+10, heightTS+10)];
  viewTishi.backgroundColor=[UIColor colorWithRed:0 green:0 blue:0 alpha:1];
  viewTishi.alpha=0.7;
  [window addSubview:viewTishi];
  [viewTishi.layer setMasksToBounds:YES];
  [viewTishi.layer setCornerRadius:5.0];
  //    viewTishi.alpha=0.7;
  [viewTishi addSubview:picView];
  [viewTishi addSubview:patternLabel1];
  //    patternLabel1.center.y = viewTishi.center.y;
  [viewTishi setCenter:window.center];
  
  // 延迟N秒执行:
  double delayInSeconds = theTime;
  
  dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
  dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
      [patternLabel1 removeFromSuperview];
      [viewTishi removeFromSuperview];
  });
  
}
#pragma mark - 按钮倒计时
+ (void)openCountdown:(UIButton *)authCodeBtn {
  
  __block NSInteger time = 59; //倒计时时间
  
  dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
  
  dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
  
  dispatch_source_set_event_handler(_timer, ^{
      if(time <= 0){ //倒计时结束,关闭
          dispatch_source_cancel(_timer);
          dispatch_async(dispatch_get_main_queue(), ^{
              //设置按钮的样式
              [authCodeBtn setTitle:@"重新发送" forState:UIControlStateNormal];
              [authCodeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
              authCodeBtn.userInteractionEnabled = YES;
          });
      }else{
          
          int seconds = time % 60;
          dispatch_async(dispatch_get_main_queue(), ^{
              
              //设置按钮显示读秒效果
              [authCodeBtn setTitle:[NSString stringWithFormat:@"重新发送(%.2d)", seconds] forState:UIControlStateNormal];
              [authCodeBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
              authCodeBtn.userInteractionEnabled = NO;
          });
          time--;
      }
  });
  dispatch_resume(_timer);
}



#pragma mark - 截屏
+ (UIImage *)captureScreen {
  UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
  CGRect rect = [keyWindow bounds];
  UIGraphicsBeginImageContext(rect.size);
  CGContextRef context = UIGraphicsGetCurrentContext();
  [keyWindow.layer renderInContext:context];
  UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();
  return img;
}


#pragma mark - 限制输入
+ (BOOL)validateChar:(NSString*)charStr andLimit:(NSString *)limitStr {
  BOOL res = YES;
  NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:limitStr];
  int i = 0;
  while (i < charStr.length) {
      NSString * string = [charStr substringWithRange:NSMakeRange(i, 1)];
      NSRange range = [string rangeOfCharacterFromSet:tmpSet];
      if (range.length == 0) {
          res = NO;
          break;
      }
      i++;
  }
  return res;
}

+ (CGSize)getAutoHeight:(NSString *)testStr andFontOfSize:(int)Size andExtrawidth:(float)width{
  UIFont * tfont = [UIFont systemFontOfSize:Size];
  //高度估计文本大概要显示几行,宽度根据需求自己定义。 MAXFLOAT 可以算出具体要多高
  CGSize size = CGSizeMake([UIScreen mainScreen].bounds.size.width - width,MAXFLOAT);//ZWidth  屏幕宽度
  //    获取当前文本的属性
  NSDictionary * tdic = [NSDictionary dictionaryWithObjectsAndKeys:tfont,NSFontAttributeName,nil];
  //ios7方法,获取文本需要的size,限制宽度
  CGSize  actualsize = [testStr boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin  attributes:tdic context:nil].size;
  //   更新UILabel的frame
  return actualsize;
}
+ (NSString *) getTimeFromString :(NSString *) str{
  NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
  [formatter setDateStyle:NSDateFormatterMediumStyle];
  [formatter setTimeStyle:NSDateFormatterShortStyle];
  [formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; // ----------设置你想要的格式,hh与HH的区别:分别表示12小时制,24小时制
  NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];
  [formatter setTimeZone:timeZone];
  NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:[str integerValue]];
  return [formatter stringFromDate:confromTimesp];
}

+ (NSString *)htmlEntityDecode: (NSString *)str{
  str = [str stringByReplacingOccurrencesOfString:@""" withString:@"\""];
  str = [str stringByReplacingOccurrencesOfString:@"'" withString:@"'"];
  str = [str stringByReplacingOccurrencesOfString:@"&" withString:@"&"];
  str = [str stringByReplacingOccurrencesOfString:@"<" withString:@"<"];
  str = [str stringByReplacingOccurrencesOfString:@">" withString:@">"];
  str = [str stringByReplacingOccurrencesOfString:@" " withString:@"\n"];
  return str;
}

@end

有些地方做的不够好或者不简洁,请见谅哈。大家也可以给我提供一些自己开发中常用的方法技巧,在这里多谢各位大神指教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,401评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 坚持分享第五天 昨天锻炼回家,发现家里多了很多东西——布套。这些布套是妈妈礼拜完从教会带回来的,原...
    FYATIAG阅读 239评论 0 0
  • 首先,终于不画多肉了! 都是临摹的大触作品, 青春无敌,晶莹剔透的美少女被我画成老太婆也是没谁了。 有没有什么点我...
    废柴玮阅读 889评论 3 4
  • 九月,我想去上海看一看企鹅名人赛,充满仪式感地亲手将那关于篮球的青春埋葬。 2006年夏天,天神下凡的德恩韦德带着...
    当年热血阅读 451评论 0 4