美文网首页
字符串区分颜色和大小

字符串区分颜色和大小

作者: ChenL | 来源:发表于2021-01-12 17:29 被阅读0次
    image.png

    iOS利用NSAttributeString实现不同颜色大小显示的方法

    一个UILabel显示不同大小颜色的字符串,当然我们首先的想到属性字符串,但是注意:我们这里要处理国际化完成的字符串

    比如:2分14秒 或者 2min 14secs

    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UILabel *label;
    @end
    @implementation ViewController
    - (void)viewDidLoad {
     [super viewDidLoad];
     
     //调用
     NSAttributedString *resultTime = [self formattedCurrentTime:133];
     self.label.attributedText = resultTime;
    }
    
    一、字符串range匹配法
    /**
     返回当前时间格式
     @return 返回组装好的字符串
     */
    - (NSAttributedString *)formattedCurrentTime:(NSTimeInterval)timeInterval {
     
     NSUInteger time = (NSUInteger)timeInterval;
     NSInteger minutes = (time / 60) % 60;
     NSInteger seconds = time % 60;
     NSString *minStr = [NSString stringWithFormat:@" %zd ",minutes];
     NSString *secStr = [NSString stringWithFormat:@" %zd ",seconds];
     //假设这就是我们国际化后的字符串
     NSString *localizedFormatString = [NSString stringWithFormat:@"%@分%@秒",minStr,secStr];
     NSMutableAttributedString *attributeStr = [[NSMutableAttributedString alloc] initWithString:localizedFormatString];
     NSRange minRange, secRange;
     if (@available(iOS 9.0, *)) {
     minRange = [localizedFormatString localizedStandardRangeOfString:minStr];
     secRange = [localizedFormatString localizedStandardRangeOfString:secStr];
     } else {
     minRange = [localizedFormatString rangeOfString:minStr];
     secRange = [localizedFormatString rangeOfString:secStr];
     }
     NSDictionary *timeAttrs = @{ NSForegroundColorAttributeName : [UIColor redColor],
         NSFontAttributeName : [UIFont systemFontOfSize:40.0f]};
     [attributeStr addAttributes:timeAttrs range:minRange];
     [attributeStr addAttributes:timeAttrs range:secRange]; 
     return [[NSAttributedString alloc] initWithAttributedString:attributeStr];;
    }
    
    二、用正则匹配数字
    /**
     返回当前时间格式
     @return 返回组装好的字符串
     */
    - (NSAttributedString *)formattedCurrentTime:(NSTimeInterval)timeInterval {
     
     NSUInteger time = (NSUInteger)timeInterval;
     NSInteger minutes = (time / 60) % 60;
     NSInteger seconds = time % 60;
     NSString *minStr = [NSString stringWithFormat:@" %zd ",minutes];
     NSString *secStr = [NSString stringWithFormat:@" %zd ",seconds];
     //假设这就是我们国际化后的字符串
     NSString *localizedFormatString = [NSString stringWithFormat:@"%@分%@秒",minStr,secStr];
     NSMutableAttributedString *attributeStr = [[NSMutableAttributedString alloc] initWithString:localizedFormatString];
     NSDictionary *timeAttrs = @{ NSForegroundColorAttributeName : [UIColor redColor],
         NSFontAttributeName : [UIFont systemFontOfSize:40.0f]}; 
     /** 方案2 **/
     NSError *error = nil;
     NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:@"[0-9]+" options:NSRegularExpressionCaseInsensitive error:&error];
     if (error == nil) {
     NSArray *matches = [reg matchesInString:localizedFormatString options:NSMatchingReportCompletion range:NSMakeRange(0, localizedFormatString.length)];
     for (NSTextCheckingResult *match in matches) {
      for (NSUInteger i = 0; i < match.numberOfRanges; i++) {
      NSRange range = [match rangeAtIndex:i];
      if (range.location != NSNotFound) {
         [attributeStr addAttributes:timeAttrs range:range];
         }
       }
      }
     }
     return [[NSAttributedString alloc] initWithAttributedString:attributeStr];;
    }
    

    时间格式化代码如下:

    /**
     返回时间格式 HH:mm:ss
     @return 返回组装好的字符串
     */
    - (NSString *)formattedCurrentTime {
     NSUInteger time = (NSUInteger)self.recorder.currentTime;
     NSInteger hours = (time / 3600);
     NSInteger minutes = (time / 60) % 60;
     NSInteger seconds = time % 60;
     
     NSString *format = @"%02i:%02i:%02i";
     return [NSString stringWithFormat:format, hours, minutes, seconds];
    }
    

    相关文章

      网友评论

          本文标题:字符串区分颜色和大小

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