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