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>
网友评论