【问题标题】:Multiple touch event in single image view单个图像视图中的多个触摸事件
【发布时间】:2019-01-10 23:59:52
【问题描述】:

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

【问题讨论】:

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

标签: ios objective-c iphone uiimageview


【解决方案1】:

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

解决方案 1:

获取具有不同颜色的状态的图像。然后就可以拿到触摸点的颜色,和状态的颜色对比。

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

请注意,上图中的某些州具有相同的颜色,因此此精确图像将不起作用。

要获取一个像素的颜色可以参考this link

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

  1. 获取各个州的所有图像。
  2. 在 IB 中使视图成为 StateView 的子类
  3. 在IB中设置State的图片和名称
  4. 如果触摸在该州内,它会打印目前为止的州名以用于演示目的。

链接到project

参考文献:

Mark Moeykens Youtube

希望这会有所帮助。

结果:

【讨论】:

    【解决方案2】:

    是的,我在我的一个应用程序中做到了。您需要保留状态的路径,然后点击,找到该点所在的路径。 在我的情况下,我必须用一组矩形来划分图像,然后我只记下第一个 & 列表点(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))
        }        
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-12
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-26
      相关资源
      最近更新 更多