在UIImageView的不同区域识别UIGesture
我有这个形象:
我想要做的是添加一个UITapGestureRecognizer这个图像(或者我可以拆分图像的不同部分组成,并为每个部分添加一个UITapGestureRecognizer),以便有不同的行动根据叶轻拍。 如果我将图像分成不同的图像,每个图像的UIImageViews可能会重叠,轻敲一个将被认为是另一个轻拍。 只有一个图像意味着要知道属于一个叶子的屏幕点,而不是另一个。
任何线索如何做到这一点将非常感激。 谢谢
通过检查手势识别器的locationInView:
来改变你的行为。
如果您将图像作为一个单元处理,请在手势识别器callback中实现此function,以确定哪个“叶”(如果有)被点击。
如果将图像作为多个图像进行处理,则还可以在callback中实现该图像,或者也可以在例如您的委托的gestureRecognizerShouldBegin:
抑制绘制的叶子外的触摸事件。
编辑:我没有意识到,你也可能正在寻找帮助,找出一个点是否在一片叶子内。 @PhillipMills在这一点上是正确的:我们需要知道你是如何绘制图像。
跟进:这是在我的专业领域之外。
从打击testing的angular度来看, 最简单的方法是使用Quartz绘图和CGPathContainsPoint()
来完成@PhillipMills的build议。 如果你有需要渲染为PNG的详细graphics,那么你肯定可以构build一个简单的path,这个path将被(虚拟)覆盖以允许命中testing。
您的其他选项,AFAIK,将做mathtesting,但基本上是重新实现CGPathContainsPoint()
但没有一个path,或使用各种技巧,看你的触摸点像素的颜色进行命中testing。 如果你走这条路线,谷歌search会产生一些有用的结果,但老实说,只要使用一些UIBezierPath
代码在代码中重新创build一个简单的形状。
不知道这是否会有帮助,但如果你搞不清楚哪个叶子被点击了,你可以使用我们在CD-ROM项目中使用的旧的图像映射技巧,在图像上进行像素精确的点击跟踪。
你有你的全尺寸图像。 制作一个25%(或更less)的缩放版本。 用不同的颜色填充每个想要跟踪点击的叶子区域; 任何你想忽略的东西都会变黑。 点击完整大小的图像时,获取x / y坐标并按缩放图像的百分比缩放它们。 然后获取按比例缩放的x / y坐标的缩放图像的像素颜色。 通过确定像素颜色,您将知道哪个叶子被点击。
听起来笨重,但它运作得很好,速度很快。
(所有这一切,我不认为图像的阿尔法区域触发手势识别器 – 所以打破形象将不那么复杂/代码密集)。
如果可以将形状分解为组成元素,那么可以将每个元素放入其自己的图层中,并使用此堆栈溢出讨论中讨论的方法来确定触摸的内容: 使用CALayer内容的alpha属性命中testing