CoreText的简单使用(五)

2021-06-20  本文已影响0人  KG丿夏沫

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>

上一篇下一篇

猜你喜欢

热点阅读