Ios 双击识别器在NSTimer运行时不工作

Ios 双击识别器在NSTimer运行时不工作,ios,objective-c,nstimer,grand-central-dispatch,uitapgesturerecognizer,Ios,Objective C,Nstimer,Grand Central Dispatch,Uitapgesturerecognizer,我有一个计时器: [NSTimer scheduledTimerWithTimeInterval:(float)jpegInterval/1000 target:self selector:@selector(jpegDownloaderSelector:) userInfo:url repeats:YES]; jpegDownloaderSelector执行从url获取图像的操作,并在imageView中进行设置,如下所示: -(void) jpegDownloaderSelector:(N

我有一个计时器:

[NSTimer scheduledTimerWithTimeInterval:(float)jpegInterval/1000 target:self selector:@selector(jpegDownloaderSelector:) userInfo:url repeats:YES];
jpegDownloaderSelector执行从url获取图像的操作,并在imageView中进行设置,如下所示:

-(void) jpegDownloaderSelector:(NSTimer*)timer{
    [self performSelectorInBackground:@selector(jpegDownloader:) withObject:(NSString*)[timer userInfo]];
}

-(void) jpegDownloader:(NSString*)imageUrl{
    dispatch_async(dispatch_get_main_queue(), ^{        
       imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://10.8.9.100:509/jpeg"]];
       imageView.image = [UIImage imageWithData:imgData];
    });
}
我还使用手势识别器设置了imageView

[imageView addGestureRecognizer:singleTapRecognizer];
[imageView addGestureRecognizer:doubleTapRecognizer];
其中,识别器定义为:

singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(functoCall:)];
singleTapRecognizer.numberOfTapsRequired = 1;
singleTapRecognizer.numberOfTouchesRequired = 1;

doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(funcToCall2:)];
doubleTapRecognizer.numberOfTapsRequired = 2;
doubleTapRecognizer.numberOfTouchesRequired = 1;
我遇到的问题是,当计时器启动时,我双击imageView,双击识别器不响应,而是单次点击响应

若我为timer repeats(定时器重复)参数设置“否”,则双击响应。因此,我怀疑double tap没有响应是因为运行了由计时器调用的后台函数

任何人都建议我可以实现后台功能,并且识别双击没有问题。

执行此操作时:

dispatch_async(dispatch_get_main_queue(), ^{
您正在将任务推到主线程上,只是在很短的延迟之后。因此,您的图像下载是在主线程上完成的,并且阻止了所有其他交互

相反,您应该在后台线程(
dispatch\u get\u global\u queue
)上运行下载,然后返回到主线程仅处理结果



我怀疑这是因为你的计时器重复间隔太低。什么是jpegInterval?jpegInterval是200,因此计时器将每200次重复一次。这也会立即终止您的UI,因为您只是将其分派回主队列。它们不是在后台运行的。有没有更好的解决方案?即使使用Wain建议的ans,JPEG间隔也需要设置得更高。我需要它尽可能的小。老兄,你将受到访问URL和下载内容速度的限制。这已经是最好的解决方案。您建议我如何调度\u获取\u全局\u队列并推送到主线程来处理结果?Sry,我是新来的中央调度。也许是示例代码?
-(void) jpegDownloader:(NSString*)imageUrl {
    dispatch_async(dispatch_get_global_queue(), ^{        
       imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://10.8.9.100:509/jpeg"]];

       dispatch_async(dispatch_get_main_queue(), ^{
           imageView.image = [UIImage imageWithData:imgData];
       });
    });
}