美文网首页
判断点击的point坐标在不在某段文字上

判断点击的point坐标在不在某段文字上

作者: DSA碼侬 | 来源:发表于2019-07-25 09:18 被阅读0次
    实例图
    要求:判断点击的point在不在链接文字上,比如https://www.baidu.com,容易求出链接的NSRange rangeOfString:

    我的思路2种:
    1、找到点击的point所在的文字下标index,与链接的字符长度linkRange(容易求出rangeOfString)进行比较,在其内就说明点击到了链接 NSLocationInRange(index, linkRange)

    2、找出链接展示的位置linkFrameRange,根据point在不在linkFrameRangeCGRectContainsPoint(linkFrameRange, point)

    思路1需要先找到point所在的文字,再求出下标,不容易找,所以选择了第二中思路。

    // 获得链接所在的rect     NSRange 转 UITextRange
    UITextPosition *beginning = self.contentLbl.beginningOfDocument;
    UITextPosition *start = [self.contentLbl positionFromPosition:beginning offset:linkRange.location];
    UITextPosition *end = [self.contentLbl positionFromPosition:start offset:link_range.length];
    UITextRange *textRange = [self.contentLbl textRangeFromPosition:start toPosition:end];
    
    //判断下标是否在连接的范围,如果是,证明点击的该链接
    if (CGRectContainsPoint(linkRect, point)){
           if (resultBlock) {
                resultBlock(link.linkStr,link.range,(NSInteger)j);
            }
                return YES;
         }
    

    但是:经过验证,当一个链接是大于一行显示的时候,点击底部的point Y是不在链接的Rect内的,所以,放弃这个方法。下面这个方法更加准确:参数range是指 linkRange = [@"xxxxx" rangeOfString:linkStr]

    - (CGRect)boundingRectForCharacterRange:(NSRange)range{
        NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:[self.contentLbl attributedText]];
        NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
        [textStorage addLayoutManager:layoutManager];
        
        NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:[self bounds].size];
        textContainer.lineFragmentPadding=0;
        [layoutManager addTextContainer:textContainer];
        
        NSRange glyphRange;
        [layoutManager characterRangeForGlyphRange:range actualGlyphRange:&glyphRange];
        
        return [layoutManager boundingRectForGlyphRange:glyphRange inTextContainer:textContainer];
        
    }
    

    相关文章

      网友评论

          本文标题:判断点击的point坐标在不在某段文字上

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