YYText使用

YYText使用_第1张图片
结构
  • 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制作

    YYText使用_第2张图片
    文字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];
  • 文字附加

    YYText使用_第3张图片
    attach
            NSString *title = @"This is git attachment: ";
           
            [text appendAttributedString:[[NSAttributedString alloc] initWithString:title attributes:nil]];
            
            YYImage *image = [YYImage imageNamed:@"[email protected]"];
            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]];
    
  • 图文环绕

    YYText使用_第4张图片
    图文环绕
     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 文本改变调用

      YYText使用_第5张图片
      5月-04-2017 17-54-59
     @interface YYTextExampleEmailBindingParser :NSObject 
  @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使用(查找添加位置添加)

    YYText使用_第6张图片
    rubyanotaion
  • 包括在上边加,后边下边加都是可以的

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

你可能感兴趣的:(YYText使用)