2

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

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

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

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

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

4

3 回答 3

3

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

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

  • 在处理添加的同一位置处理视图删除UIImageView- 添加子视图时,将对__weak它的引用存储在单独的变量中。当添加了事件的视图UIImageView获取touchesEnded事件时,转到该变量,然后删除子视图。
  • 保持UIImageView在那里,但控制它的透明度——而不是添加和删除 subvuew,将其启动为完全透明,然后在触摸时使其不透明,然后在发布时再次使其透明。
  • 根本不要添加临时文件UIImageViewCALayer而是使用- 看起来您添加图像视图只是为了在其中短时间托管图像。有一种更简单的方法,即使用CALayer. 这种方法应该更容易实现,因为该层不参与触摸事件的处理。
于 2013-08-13T20:21:50.533 回答
0

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

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

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

于 2013-08-13T20:20:27.710 回答
0

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

于 2013-08-13T20:20:42.097 回答