单个图像视图中的多个触摸事件

Multiple touch event in single image view

提问人:Arun Kumar Munusamy 提问时间:8/3/2018 最后编辑:Arun Kumar Munusamy 更新时间:8/4/2018 访问量:424

问:

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

iOS Objective-C iPhone UIImImageView

评论

0赞 Kerberos 8/3/2018
对不起,我不明白。是要截获图像上的多点触控,还是要截获印度单个邦的触控?
1赞 vivekDas 8/3/2018
您可以在图像上为所有状态创建热点,并为所有热点注册点击手势。
0赞 Arun Kumar Munusamy 8/3/2018
@vivekDas你能解释一下吗?
0赞 vivekDas 8/3/2018
热点是指圆形区域,可以是圆形半透明的图像。然后使用圆形视图注册点击手势。
1赞 Jen Jose 8/3/2018
您还可以使用印度地图的 SVG,该地图将提供 CALayers 状态,并且您可以轻松检测各个州的触摸。有许多库可以帮助解析 SVG,例如 github.com/SVGKit/SVGKit 等。

答:

1赞 Naresh 8/3/2018 #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))
    }        
}
6赞 Md. Ibrahim Hassan 8/4/2018 #2

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

解决方案 1 :

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

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

请注意,在上面的这张图片中,某些州具有相同的颜色,因此此确切的图像将不起作用。

要获取像素的颜色,您可以参考此链接

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

  1. 获取各个状态的所有图像。
  2. 在 IB 中使视图成为 StateView 的子类
  3. 在IB中设置状态的图像和名称
  4. 如果触摸在状态内,它会打印状态名称,直到现在用于演示目的。

链接到项目

引用:

马克·莫伊肯斯 Youtube

希望这会有所帮助。

结果:

enter image description here