YYText使用

作者: YKDog | 来源:发表于2017-04-25 10:32 被阅读7896次
    结构
    • NSMutableString + YYText实例

      YYText+add
     NSMutableAttributedString *text = [NSMutableAttributedString new];
      NSMutableAttributedString *one = [[NSMutableAttributedString alloc] initWithString:@"Another Link"];
    
      //设置字号
      one.font = [UIFont boldSystemFontOfSize:30];
    
      //设置字体颜色红色
      one.color = [UIColor redColor];
    
    
      //字体边框
      YYTextBorder *border = [YYTextBorder new];
      //边框圆角
      border.cornerRadius = 50;
      //边框边距
      border.insets = UIEdgeInsetsMake(0, -10, 0, -10);
      //边框线宽
      border.strokeWidth = 0.5;
      //边框颜色等于字体颜色
      border.strokeColor = one.color;
      border.lineStyle = YYTextLineStyleSingle;
      one.textBackgroundBorder = border;
    
      //高亮边框
       YYTextBorder *highlightBorder = border.copy;
       highlightBorder.strokeWidth = 0;
       highlightBorder.strokeColor = one.color;
    
      //填充颜色红色
       highlightBorder.fillColor = one.color;
    
      //设置高亮颜色
      YYTextHighlight *highlight = [YYTextHighlight new];
      [highlight setColor:[UIColor whiteColor]];
    
      //高亮的背景框
      [highlight setBackgroundBorder:highlightBorder];
    
      //点击高亮回调
      highlight.tapAction = ^(UIView *containerView, NSAttributedString *text, NSRange range, CGRect rect) {
                  NSLog(@"高亮1");
              };
      [one setTextHighlight:highlight range:one.rangeOfAll];
    
    • tag制作

      文字tag
      NSMutableAttributedString *text = [NSMutableAttributedString new];
          
          
          //设置文字
          NSArray *tags = @[@"◉red", @"◉orange"];
          
          for (int i = 0; i < tags.count; i++) {
              NSString *tag = tags[i];
              NSMutableAttributedString *tagText = [[NSMutableAttributedString alloc] initWithString:tag];
              
              //插入空格
              [tagText insertString:@"   " atIndex:0];
              [tagText appendString:@"   "];
              
              
              //文字颜色和字体
              tagText.font = [UIFont boldSystemFontOfSize:16];
              tagText.color = [UIColor whiteColor];
              
             
              
              //边框
              YYTextBorder *border = [YYTextBorder new];
              border.strokeWidth = 1.5;
              border.strokeColor = [UIColor redColor];
              border.fillColor = [UIColor greenColor];
              border.cornerRadius = 100;
              border.insets = UIEdgeInsetsMake(-2, -5.5, -2, -8);
              
              [tagText setTextBackgroundBorder:border range:[tagText.string rangeOfString:tag]];
              
              //设置绑定的效果是成为一个整体一起操作 否则删除是一个一个字母删除
               [tagText setTextBinding:[YYTextBinding bindingWithDeleteConfirm:NO] range:tagText.rangeOfAll];
              
              [text appendAttributedString:tagText];
          }
          
          
          
          
          //创建YYTextView
          YYTextView *textView = [YYTextView new];
          textView.attributedText = text;
          
          textView.size = self.view.size;
          textView.height -= 64;
          [self.view addSubview:textView];
    
    • 文字附加

      attach
              NSString *title = @"This is git attachment: ";
             
              [text appendAttributedString:[[NSAttributedString alloc] initWithString:title attributes:nil]];
              
              YYImage *image = [YYImage imageNamed:@"niconiconi@2x.gif"];
              image.preloadAllAnimatedImageFrames = YES;
              YYAnimatedImageView *imageView = [[YYAnimatedImageView alloc] initWithImage:image];
              imageView.autoPlayAnimatedImage = NO;
              
              imageView.size = CGSizeMake(100, 100);
              
              [imageView startAnimating];
              [YYImageHelper addTapControlToAnimatedImageView:imageView];
              [YYImageHelper addPanControlToAnimatedImageView:imageView];
              
              NSMutableAttributedString *attachText = [NSMutableAttributedString attachmentStringWithContent:imageView contentMode:UIViewContentModeCenter attachmentSize:imageView.size alignToFont:font alignment:YYTextVerticalAlignmentBottom];
              [text appendAttributedString:attachText];
              [text appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n" attributes:nil]];
      
    • 图文环绕

      图文环绕
       UIImage *image = [[YYImage alloc] initWithData:data scale:2];
          UIImageView *imageView = [[YYAnimatedImageView alloc] initWithImage:image];
          imageView.clipsToBounds = YES;
          imageView.userInteractionEnabled = YES;
          imageView.layer.cornerRadius = imageView.height / 2;
          
          //核心: 通过设置textView 的exclusionPaths 在这个区域path内不会显示文字
          imageView.center = CGPointMake(kScreenWidth / 2, kScreenWidth / 2);
          self.imageView = imageView;
          
          @weakify(self);
          
          UIPanGestureRecognizer *g = [[UIPanGestureRecognizer alloc] initWithActionBlock:^(UIPanGestureRecognizer *g) {
              @strongify(self);
              if (!self) return;
              
              CGPoint p = [g locationInView:self.textView];
              self.imageView.center = p;
              
              UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.imageView.frame
                                                              cornerRadius:self.imageView.layer.cornerRadius];
              self.textView.exclusionPaths = @[path];
          }];
          
          [imageView addGestureRecognizer:g];
          
          [self.textView addSubview:self.imageView];
          UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.imageView.frame
                                                          cornerRadius:self.imageView.layer.cornerRadius];
          self.textView.exclusionPaths = @[path]; /// Set exclusion paths
      
      
    • 文字绑定(把指定单位的字符集合到一起整体处理)

      • 新建一个文本解析类, 继承自NSObject, 写入regex正则, 实现协议方方法。方法中如果对文本有改变返回YES,没有改变返回NO。

      • 使用时候直接 textView.textParser = [YYTextExampleEmailBindingParser new];

      • 协议方法在YYLabel或者YYTextView 文本改变调用

        5月-04-2017 17-54-59
         @interface YYTextExampleEmailBindingParser :NSObject <YYTextParser>
      @property (nonatomic, strong) NSRegularExpression *regex;
      @end
    
      @implementation YYTextExampleEmailBindingParser
    
        - (instancetype)init {
          self = [super init];
          NSString *pattern = @"[-_a-zA-Z0-9@\\.]+[ ,\\n]";
          self.regex = [[NSRegularExpression alloc]     initWithPattern:pattern options:kNilOptions error:nil];
          return self;
        }
    
      //协议方法
    -   (BOOL)parseText:(NSMutableAttributedString *)text selectedRange:(NSRangePointer)range {
    
    
          __block BOOL changed = NO;
    
          NSLog(@"%@", text.string);
    
          [_regex enumerateMatchesInString:text.string options:NSMatchingWithoutAnchoringBounds range:text.rangeOfAll usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
        ​      
              if (!result) return;
    
              //根据结果来的 range
              //0-16
              NSRange range = result.range;
              
              NSLog(@"-----%@------", NSStringFromRange(range));
              
              if (range.location == NSNotFound || range.length < 1) return;
              if ([text attribute:YYTextBindingAttributeName atIndex:range.location effectiveRange:NULL]) return;
              
              NSRange bindlingRange = NSMakeRange(range.location, range.length - 1);
              
              YYTextBinding *binding = [YYTextBinding bindingWithDeleteConfirm:YES];
              [text setTextBinding:binding range:bindlingRange]; /// Text binding
              [text setColor:[UIColor colorWithRed:0.000 green:0.519 blue:1.000 alpha:1.000] range:bindlingRange];
              changed = YES;
          }];
          return changed;
        }
      @end
    
    • Annotation使用(查找添加位置添加)

      rubyanotaion
    • 包括在上边加,后边下边加都是可以的

       one = [[NSMutableAttributedString alloc] initWithString:@"日本語で書いた作文です。"];
            one.font = [UIFont boldSystemFontOfSize:30];
            
            ruby = [YYTextRubyAnnotation new];
            ruby.textBefore = @"に";
            [one setTextRubyAnnotation:ruby range:[one.string rangeOfString:@"日"]];
    

    相关文章

      网友评论

        本文标题:YYText使用

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