单张图像视图中的多点触摸事件

时间:2018-08-03 06:44:43

标签: ios objective-c iphone uiimageview

我想为单个图像视图实现多次触摸事件。例如,我有一张印度地图的图像,在这里我应该能够捕获不同州的触摸事件。有人可以给我一些实现目标c的想法吗?

2 个答案:

答案 0 :(得分:6)

嗯,一个很有趣的问题。该解决方案可以通过多种方式实现。

解决方案1:

获取状态不同的彩色图像。然后,您可以获得触摸时的颜色并将其与状态颜色进行比较。enter image description here

因此,如果某点的颜色是RGB基256,则颜色为(240,125,131),则状态为马哈拉施特拉邦。

在这张图片的上方,注意某些状态具有相同的颜色,因此该精确图像将不起作用。

要获得像素的颜色,可以参考this link

解决方案2 :(用Swift编码,但是可以与经Obj-C链接测试的Objective C完美配合使用)

  1. 获取各个州的所有图像。
  2. 在IB中使视图成为StateView的子类
  3. 在IB中设置国家的图片和名称
  4. 如果触摸处于状态之内,则会打印状态名称,直到演示为止。

链接到project

参考文献:

Mark Moeykens Youtube

希望这会有所帮助。

结果:

enter image description here

答案 1 :(得分:1)

是的,我在我的一个应用程序中做到了。您需要保留状态的路径,然后点击以查找该点所在的路径。 在我的情况下,我必须用一组矩形划分图像,然后我只记下第一个&列表点(CGPoint)并保存矩形的高度宽度。然后根据这些数据,我比较了该点是否位于哪个区域。

如何对状态区域进行罚款?

您需要手动点击区域边界并通过以下默认方式获取CGPoint:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    let point = touches.first?.location(in: self)
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

    let point = touches.first?.location(in: self)
    touches.forEach { (touch) in
        print(touch.location(in: self))
    }        
}