1

私はタイマーを持っています:

[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];
    });
}

私はgestureRecognizerで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をダブルタップすると、ダブルタップ認識エンジンが応答せず、代わりにシングルタップが応答することです。

タイマー繰り返しパラメータに NO を設定すると、ダブルタップが応答しました。したがって、タイマーによって呼び出されるバックグラウンド関数が実行されているため、ダブルタップが応答していないと思われます。

誰でもバックグラウンド機能を実装でき、ダブルタップの認識に問題は​​ないという提案があります。

4

1 に答える 1

2

これを行う場合:

dispatch_async(dispatch_get_main_queue(), ^{

非常に短い遅延の直後に、タスクをメインスレッドにプッシュしています。したがって、イメージのダウンロードはメイン スレッドで行われ、他のすべてのやり取りがブロックされます。

代わりに、バックグラウンド スレッド ( ) でダウンロードを実行してdispatch_get_global_queueから、結果を処理するためにのみメイン スレッドにプッシュ バックする必要があります。


-(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];
       });
    });
}
于 2013-07-30T09:27:56.773 に答える