gpt4 book ai didi

ios - UIView touchesEnded 事件在第一次点击时不调用,但在再次点击时调用

转载 作者:行者123 更新时间:2023-11-28 19:40:34 26 4
gpt4 key购买 nike

我有一个名为“MyView”的 UIView 子类。在ControllerA中,它有一个属性MyView *myView,并将其添加到self.view中。在myView上,有一些随机的 subview 从右向左滑动,然后消失。我想要做的是,当用户点击其中一个滑动 subview 时,识别该 View ,然后按下另一个 Controller 。

在 MyView.m 中,我覆盖了 touchesBegantouchesEndedtouchesCanceled,并在每个方法中添加了 NSLog。在 touchesEnded 方法中,我使用下面的代码来识别被点击的 subview :

UITouch *touch = [touches anyObject];
CGPoint touchLoaction = [touch locationInView:self];
for (UIView *subview in self.subviews) {
if ([subview.layer.presentationLayer hitTest:touchLoaction]) {
if (_delegate && [_delegate respondsToSelector:@selector(canvas:didSelectView:)]) {
[_delegate canvas:self didSelectView:subview];
}
break;
}
}

我的操作步骤是:

  1. 当我点击一个 subview 时,日志是:开始,结束。然后推送到controllerB。

  2. 当我返回到 Controller A 并点击一个 subview 时,日志是:开始、取消并​​且没有推送到 Controller B,因为没有调用 touchesEnded。

  3. 再次点击 subview 时,日志为:开始,结束,然后推送到controllerB。

我怀疑原因是因为推送,所以我注释掉了 touchesEnded 方法中的“识别”代码,现在,当我点击一个 subview 时,日志总是:开始,结束。

所以我的问题是,为什么在步骤 2 中没有调用 touchesEnded 方法?

我尝试使用 performSelector:afterDelay: 来延迟推送,但没有用。当我弹出并点击一个 subview 时,总是调用 touchesCancelled 方法,然后我再次点击,然后调用 touchesEnded

谁能帮我解决这个问题?提前致谢并致以最良好的祝愿!

最佳答案

检查您是否在任何涉及的 View Controller 上激活了手势识别,如果是,则将其关闭。在某些情况下,识别器倾向于取消触摸。根据您的描述,我了解到您无论如何都没有使用手势识别器。

关于ios - UIView touchesEnded 事件在第一次点击时不调用,但在再次点击时调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34588374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com