YYText使用

结构
  • 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:@"日"]];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,699评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,124评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,127评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,342评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,356评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,057评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,654评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,572评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,205评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,343评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,015评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,704评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,196评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,690评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,348评论 2 358

推荐阅读更多精彩内容