NSTimer未能停止



很抱歉,这是一个重复的问题,但我已经尝试了我能找到的所有解决方案,但都没有成功。

总之,这是我的问题,特别是。我有以下代码,我在长按手势时启动计时器,然后在手势取消或动作完成时停止计时器。

-(void)photoLongPress:(UILongPressGestureRecognizer *)press
{
    NSTimer *timer = nil;
    if (press.state == UIGestureRecognizerStateBegan)
    {
        //Start timer
        timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(photoLongPressTimer:) userInfo:nil repeats:YES];
    }
    if (press.state == UIGestureRecognizerStateEnded)
    {
        [timer invalidate];
        timer = nil;
    }
}
-(void)photoLongPressTimer:(NSTimer *)timer
{
    DAProgressOverlayView *progress = (DAProgressOverlayView *)[self.view viewWithTag:kTagPhotoDeleteProgressIndicator];
    progress.progress += 0.08;
    if (progress.progress == 1)
    {
        [self deletePhotoSelection];
        [timer invalidate];
        timer = nil;
    }
}

计时器在photoLongPressTimer方法中无效时停止,但在photoLongPress方法中手势停止时不停止。为什么会这样?我被难住了。

谢谢。

您需要将timer存储在实例变量中,以便以后可以引用它。它在photoLongPressTimer:中工作,因为计时器是作为参数传递的,但在photoLongPress:中它为零,因为您刚刚创建了它,它是一个本地引用。

添加属性:

@property (strong, nonatomic) NSTimer *timer;

将新计时器存储到其中:

self.timer = [NSTimer schedu...

使属性无效并置零:

[self.timer invalidate];
self.timer = nil;
NSTimer *timer = nil;

此行仅创建一个局部变量。您必须为计时器创建一个属性。将其放入.h文件中。

@property (strong) NSTimer *timer;

然后使用这里的代码

-(void)photoLongPress:(UILongPressGestureRecognizer *)press
{    
    if (press.state == UIGestureRecognizerStateBegan)
    {
        //Start timer
        self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(photoLongPressTimer:) userInfo:nil repeats:YES];
    }
    if (press.state == UIGestureRecognizerStateEnded)
    {
        [self.timer invalidate];
        self.timer = nil;
    }
}
-(void)photoLongPressTimer:(NSTimer *)timer
{
    DAProgressOverlayView *progress = (DAProgressOverlayView *)[self.view viewWithTag:kTagPhotoDeleteProgressIndicator];
    progress.progress += 0.08;
    if (progress.progress == 1)
    {
        [self deletePhotoSelection];
        [timer invalidate];
        timer = nil;
    }
}

NSTimer *timer = nil;存在问题在CCD_ 7方法中。

从该方法中删除NSTimer *timer = nil;并存储NSTimer的实例。

最新更新