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

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

仅当您抬起手指然后再次向下按并释放它时,才会调用它。

如何获得在原始触摸结束时要调用的方法。

我有点想当您查看图像时Snapchat会做什么。

最佳答案

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

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

  • 在处理添加UIImageView的同时,删除视图的位置-添加子视图时,将对其的__weak引用存储在单独的变量中。当添加UIImageView的视图获得touchesEnded事件时,请转到该变量,然后删除子视图。
  • UIImageView保留在此处,但控制其透明度-而不是添加和删除子控件,将其完全透明地启动,然后使其在触摸时不透明,然后在发布时再次透明。
  • 根本不添加临时UIImageView,请使用CALayer代替-似乎您只是在短期内添加图像视图以在其中托管图像。有一种更简单的方法,它更轻松-使用CALayer。这种方法应该更易于实现,因为该层不参与触摸事件的处理。
  • 关于ios - 将触摸转移到subView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18218395/

    10-14 21:45