我在我的应用程序中有一个圆形视图,我在圆形视图中移动一些像图形的对象,在90%的情况下工作正常,但在某些情况下它没有调用TouchEnded
而我的重置图代码在{ {1}}方法因此在下面的某个时候卸载了我的触摸委托方法的代码。
TouchEnded
我从昨晚开始就被困在这里,所以任何帮助都会受到赞赏。
提前致谢。
答案 0 :(得分:5)
我不知道核心级别导致此问题的原因。
但是NSTimer
可以帮助我们
但我觉得我们可以通过在调用NSTimer
时添加设置/替换touchesMoved
实例来解决此问题,我们可以在touchesEnded
和touchesCancelled
重置该计时器。因此,在任何一种情况下,您的touchesEnded
或touchesCancelled
未调用的计时器都可以执行该操作,并且您的重置逻辑可以正常工作。
演示源代码
- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
NSLog(@"touchesMoved");
//Timer re-initialize code here
if (resetViewsAfterTouchStops) {
[resetViewsAfterTouchStops invalidate];
resetViewsAfterTouchStops = nil;
}
resetViewsAfterTouchStops = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(resetViewsOnceRotationStops) userInfo:nil repeats:NO];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
isTouched = NO;
[resetViewsAfterTouchStops invalidate];
resetViewsAfterTouchStops = nil;
[self resetViewsOnceRotationStops];
[self setUserInteractionOnSectorsAs:YES];
}
- (void)touchesCancelled:(nullable NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event
{
NSLog(@"touchesCancelled");
if(resetViewsAfterTouchStops)
{
[self resetViewsOnceRotationStops];
[self setUserInteractionOnSectorsAs:YES];
}
[resetViewsAfterTouchStops invalidate];
resetViewsAfterTouchStops = nil;
}
- (void) resetViewsOnceRotationStops
{
//your reset code will be place here
}
答案 1 :(得分:0)
如果您使用任何对象,请尝试删除该视图上的UIGestureRecognizer
个对象。 UIGestureRecognizer
个对象会干扰触摸事件的生命周期。