如何取消touchesMoved:withEvent:

时间:2012-04-10 06:07:36

标签: iphone objective-c ios uiview

我对该视图的触摸有疑问:

我有一个parentView(帧是(0,0,768,1024)),它包含两个子视图(A和B),一个带有标签100的帧(0,0,512,768)和带有标签200的B帧(512,0,512,768)。

我实施了触摸方法touchesBegan:withEvent: touchesMoved:withEvent: touchesEnded:withEvent:

当我开始从A到B的触摸touchesBegantouchesMoved方法会按预期触发

我需要实现:当触摸从A到达B时,触摸的A应该被触发并且触发B开始被触发,反之亦然。我在各自的方法中有自己的逻辑。有人可以建议如何实现同样的目标。

2 个答案:

答案 0 :(得分:1)

这是故意行为。通常情况下,如果您触摸取消按钮,当您抬起手指时,手指会滑到删除按钮上,您不希望意外删除某些内容。

然而,我遇到过这样的情况,我确实想要接触这样的传递。与@ejazz非常相似,我将工作移至包含A和B的视图。这启用了用户交互,并实施了touchesBegantouchesMovedtouchesEnded

当触摸移动到子视图上时,它会发送相应的消息。我只是打开和关闭了子视图,但如果需要,您应该可以在相应的子视图上调用touchesBegantouchesMovedtouchesEnded。如果您需要知道触摸的开始和结束时间,则需要跟踪与每次触摸相关联的上一个视图 - 或者只需调用其previousLocationInView:方法。

答案 1 :(得分:0)

我建议使用UIPanGestureRecognizer类。将其附加到父视图,设置委托。

您现在可以关注州和地点。因此,当状态为UIGestureRecognizerStateBegan时,检查位置是在A还是B中,当状态为UIGestureRecognizerStateEnded时,检查位置是在B还是A中。

您可以使用

检查点按视图是否包含A或B视图
CGRectContainsRect(<#CGRect rect1#>, <#CGRect rect2#>)

然后使用view.frame