我有一个带有自定义单元格的 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: 方法将被调用。所以我认为你的观点太小而无法触及。如果是,则制作一个大视图并重试。那时它会为你工作。