【问题标题】:Transfer touches to subView将触摸转移到子视图
【发布时间】:2013-08-13 20:14:21
【问题描述】:

我有一个带有自定义单元格的 UITableView,当您触摸该单元格时,它会添加一个 UIImageView 的子视图。

我希望图像在用户抬起手指后消失,并且我在 UIImageVIew 子视图上有一个 touchesEnded 方法,但它从未调用过。

只有当你抬起手指然后再次按下并松开它时才会调用它。

如何在原始触摸结束时调用该方法。

我有点喜欢 Snapchat 在您查看图像时所做的事情。

【问题讨论】:

    标签: ios objective-c ios6


    【解决方案1】:

    子视图没有收到touchesEnded 事件的原因是它没有收到touchesBegan 事件:这两个成对出现——无论哪个视图开始触摸都会结束触摸。您的UIImageView 无法获得touchesEnded,因为它当时不存在;当您按下并释放时,它会在第二次获得touchesEnded,因为这两个事件都存在。

    有几种方法可以解决这个问题:

    • 在处理添加UIImageView 的相同位置处理视图删除 - 添加子视图时,将__weak 引用存储在单独的变量中。当添加UIImageView 的视图获得touchesEnded 事件时,转到该变量,然后删除子视图。
    • UIImageView 保留在那里,但控制其透明度 - 与其添加和删除 subvuew,不如将其启动为完全透明,然后在触摸时使其不透明,然后在发布时再次使其透明。
    • 根本不要添加临时的UIImageView,而是使用CALayer - 看起来您添加图像视图只是为了在其中短时间托管图像。有一种更简单的方法可以轻松得多 - 使用CALayer。这种方法应该更容易实现,因为该层不参与触摸事件的处理。

    【讨论】:

      【解决方案2】:

      大概 touchBegan 方法在 Cell 上。这就是添加子视图的时候。

      Cell 已经记录了触摸。 Cell 的 touchesEnded 是当您抬起手指时将调用的内容。所以这就是你需要处理从屏幕上删除子视图的地方。保存对单元格类中子视图的引用,如果不等于nil,则在 touchesEnded 时将其删除。就这么简单。

      触摸开始于单元格,在子视图存在之前。同样的触摸将在单元格上结束。在进行中时,您不能将触摸转移到另一个视图。

      【讨论】:

      • 我一开始有这个,但我不能移动我的手指,因为一旦触摸离开单元格所在的区域,它就会停止调用触摸方法。
      【解决方案3】:

      当您触摸该视图并抬起手指时,不应拖动手指。如果你这样做了,那么 touchesCancelled: 方法将被调用。所以我认为你的观点太小而无法触及。如果是,则制作一个大视图并重试。然后它会为你工作。

      【讨论】:

      • 放大子视图还是初始化子视图的原始视图?
      • 子视图是屏幕的大小。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多