将触摸转移到subView

时间:2013-08-13 20:14:22

标签: ios objective-c ios6

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

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

只有在您抬起手指然后再将其按下并松开时才会调用它。

如何在原始触控结束时调用该方法。

当你查看图像时,我会对Snapchat做些什么。

3 个答案:

答案 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:方法将被调用。所以我认为你的观点太小,无法触及。如果是,那么制作一个大视图并再次尝试。它会对你有用。