CoreText的简单使用(五)

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>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 支持图文混排的排版引擎 改造模版文件 下面我们来进一步改造,让排版引擎支持对于图片的排版。在上一小节中,我们在设置...
    sunney0阅读 812评论 0 0
  • CoreText是iOS/OSX中文本显示的一个底层框架,它是用C语言写成的,有快速简单的优势。iOS中的Text...
    小猫仔阅读 5,030评论 2 9
  • 系列文章: CoreText实现图文混排 CoreText实现图文混排之点击事件 CoreText实现图文混排之文...
    老司机Wicky阅读 9,605评论 42 102
  • 回顾 前面几篇文章我们介绍了,富文本的排版,并且封装了一套自己的基于 CoreText 富文本排版库,但是实际开发...
    KG丿夏沫阅读 198评论 0 0
  • 本章前言 在上一篇《基于 CoreText 的排版引擎:基础》中,我们学会了排版的基础知识,现在我们来增加复杂性,...
    赤色追风阅读 889评论 0 2