无论是触摸还是触摸都没有在触摸后调用移动

时间:2016-07-21 05:53:39

标签: ios objective-c cocoa-touch touches

我在我的应用程序中有一个圆形视图,我在圆形视图中移动一些像图形的对象,在90%的情况下工作正常,但在某些情况下它没有调用TouchEnded而我的重置图代码在{ {1}}方法因此在下面的某个时候卸载了我的触摸委托方法的代码。

TouchEnded

我从昨晚开始就被困在这里,所以任何帮助都会受到赞赏。

提前致谢。

2 个答案:

答案 0 :(得分:5)

我不知道核心级别导致此问题的原因。

但是NSTimer可以帮助我们

但我觉得我们可以通过在调用NSTimer时添加设置/替换touchesMoved实例来解决此问题,我们可以在touchesEndedtouchesCancelled重置该计时器。因此,在任何一种情况下,您的touchesEndedtouchesCancelled未调用的计时器都可以执行该操作,并且您的重置逻辑可以正常工作。

演示源代码

- (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个对象会干扰触摸事件的生命周期。