iOS开发实用技术好东西小知识点

开发中常用方法总结

2017-08-03  本文已影响51人  风飞燕

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

#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

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

上一篇下一篇

猜你喜欢

热点阅读