很抱歉,这是一个重复的问题,但我已经尝试了我能找到的所有解决方案,但都没有成功。
总之,这是我的问题,特别是。我有以下代码,我在长按手势时启动计时器,然后在手势取消或动作完成时停止计时器。
-(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的实例。