-1

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

无论如何,这是我的问题,特别是。我有以下代码,我在长按手势上启动计时器,然后在取消该手势或操作完成时停止它。

-(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方法中停止则不会。为什么会这样?我难住了。

谢谢。

4

3 回答 3

3

您需要存储timer在一个实例变量中,以便以后可以引用它。它之所以起作用,photoLongPressTimer:是因为计时器是作为参数传递的,但photoLongPress:它是 nil ,因为您还没有创建它,它是一个本地引用。

添加属性:

@property (strong, nonatomic) NSTimer *timer;

将新计时器存储到其中:

self.timer = [NSTimer schedu...

使属性无效并为零:

[self.timer invalidate];
self.timer = nil;
于 2013-08-20T11:45:05.117 回答
2
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;
    }
}
于 2013-08-20T11:58:17.407 回答
1

问题出 NSTimer *timer = nil;-(void)photoLongPress:(UILongPressGestureRecognizer *)press 方法上。

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

于 2013-08-20T11:45:57.063 回答