美文网首页
CoreText的简单使用(五)

CoreText的简单使用(五)

作者: KG丿夏沫 | 来源:发表于2021-06-20 18:01 被阅读0次

    CoreText的简单使用(五)

    回顾

    上篇文章<a href="https://juejin.cn/post/6970881236936081439/">《CoreText的简单使用(四)》</a>中实现了基于CoreText的图文混排效果,但是有时候需求中会带有点击事件,但是我们是直接使用CoreText绘制,没办法直接给添加单击事件,所以我们可以取巧,给KGDisPlayView添加点击事件,然后判断点击区域是否在Image区域内,如果是走点击逻辑。

    图文混排支持图片点击

    既然整理出来思路在KGDisPlayView上处理点击事件,首先想到的就是UIView的Touch事件,但是作为一个高级程序员,怎么可以用这么low的呢,我们使用苹果提供的手势去实现,不是更好吗?

    在此也大概说下两者的区别和联系,UIGestureRecognizer也是封装的UITouch,但是呢又有一定的区别,UIGestureRecognizer默认情况下不会触发响应者链,而UITouch会触发响应者链。所以使用UIGestureRecognizer比UITouch更好。

    接下来我们先给KGDisPlayView添加一个轻点手势。代码如下:

    - (instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            [self addGestureRecognizerToView];
        }
        return self;
    }
    
    - (void)addGestureRecognizerToView{
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
        [self addGestureRecognizer:tap];
    }
    
    - (void)tapAction:(UITapGestureRecognizer *)tap{
        CGPoint currPoint = [tap locationInView:self];
        if (self.data.imageArray.count > 0) {
            for (KGCoreTextImageData *imageObj in self.data.imageArray) {
                //这里需要翻转坐标系,因为在CoreText中的坐标是反的
                CGRect imageReact = imageObj.imagePosition;
                CGPoint imagePosition = imageReact.origin;
                imagePosition.y = self.bounds.size.height - imageReact.origin.y - imageReact.size.height;
                CGRect rect = CGRectMake(imagePosition.x, imagePosition.y, imageReact.size.width, imageReact.size.height);
                //判断是否在区域内
                if (CGRectContainsPoint(rect, currPoint)) {
                    NSLog(@"你点击的就是图片");
                    break;
                }
            }
        }
    }
    

    然后在手势的点击事件回调中,获取当前点击的点,然后根据绘制模型中存储的图片信息,创建一个检测区域,只要点在检测区域内,那就是点击的图片,我们就可以在这里处理图片点击的操作了。到此基于CoreText的探索基本完成了,如果其中有错误欢迎随时联系我修改,分享才能找到不足。

    系列文章:

    <a href="https://juejin.cn/post/6970879379425460255/">《CoreText的简单使用(一)》</a>

    <a href="https://juejin.cn/post/6970879593129443336/">《CoreText的简单使用(二)》</a>

    <a href="https://juejin.cn/post/6970880935327694879/">《CoreText的简单使用(三)》</a>

    <a href="https://juejin.cn/post/6970881236936081439/">《CoreText的简单使用(四)》</a>

    <a href="https://juejin.cn/post/6970881873304092686/">《CoreText的简单使用(五)》</a>

    相关文章

      网友评论

          本文标题:CoreText的简单使用(五)

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