开发中常用方法总结

作者: 风飞燕 | 来源:发表于2017-08-03 14:43 被阅读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
    
    

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

    相关文章

      网友评论

        本文标题:开发中常用方法总结

        本文链接:https://www.haomeiwen.com/subject/ymdplxtx.html