我有一个带有自定义单元格的 UITableView,当您触摸该单元格时,它会添加 UIImageView 的子视图。
我希望图像在用户抬起手指后消失,并且我在 UIImageVIew 子视图上有一个 touchesEnded 方法,但它从未调用过。
仅当您抬起手指然后再次按下并释放它时才会调用它。
如何获得在原始触摸结束时调用的方法。
当您查看图像时,我有点喜欢 Snapchat 所做的事情。
我有一个带有自定义单元格的 UITableView,当您触摸该单元格时,它会添加 UIImageView 的子视图。
我希望图像在用户抬起手指后消失,并且我在 UIImageVIew 子视图上有一个 touchesEnded 方法,但它从未调用过。
仅当您抬起手指然后再次按下并释放它时才会调用它。
如何获得在原始触摸结束时调用的方法。
当您查看图像时,我有点喜欢 Snapchat 所做的事情。
子视图没有收到touchesEnded
事件的原因是它没有收到touchesBegan
事件:这两个成对出现 - 无论哪个视图开始触摸都会结束触摸。你UIImageView
不能得到touchesEnded
,因为它当时不在那里;touchesEnded
当您按下并释放时,它会第二次出现,因为这两个事件都存在。
有几种方法可以解决这个问题:
UIImageView
- 添加子视图时,将对__weak
它的引用存储在单独的变量中。当添加了事件的视图UIImageView
获取touchesEnded
事件时,转到该变量,然后删除子视图。UIImageView
在那里,但控制它的透明度——而不是添加和删除 subvuew,将其启动为完全透明,然后在触摸时使其不透明,然后在发布时再次使其透明。UIImageView
,CALayer
而是使用- 看起来您添加图像视图只是为了在其中短时间托管图像。有一种更简单的方法,即使用CALayer
. 这种方法应该更容易实现,因为该层不参与触摸事件的处理。大概 touchBegan 方法在 Cell 上。那是添加子视图的时候。
触摸已经被 Cell 记录下来。当您抬起手指时,将调用Cell 的touchesEnded。所以这就是你需要处理从屏幕上删除子视图的地方。在 cell 类中保存对子视图的引用,如果不等于nil
,则在 touchesEnded 上将其删除。就那么简单。
在子视图存在之前,触摸开始于 Cell 。同样的触摸将在单元格上结束。进行中时,您无法将触摸转移到另一个视图。
当您触摸该视图并抬起手指时,不应拖动手指。如果你这样做了,那么 touchesCancelled: 方法将被调用。所以我认为你的观点太小而无法触及。如果是,则制作一个大视图并重试。那时它会为你工作。