之前寫過一個簡單的圖片查看器,在圖片單擊,雙擊事件處理上遇到問題,通過延時單擊事件操作。
方法一:
詳細:1.設置全局變量
bool doubleTap;在單擊事件方法中設置延時操作
單擊時進行延時:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ if (doubleTap == YES) return; //單擊事件的相關操作 });
doubleTap = YES;這樣在0.2秒之後不會進行單機事件的相關操作,執行雙擊操作,記得設置(doubleTap = NO)
****當是雙擊事件時:
在0.2秒之後進行單擊事件操作
-------------------------------------
方法二:(在網易面試,當時討論到這個問題,我說了自己方法,大牛給我了兩個方法-只能說大牛就是大牛)
[self performSelector:@selector(test) withObject:nil afterDelay:.2]; [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(test) object:nil];上面的兩個方法簡單說就是,一個進行延時操作,一個就是取消延時操作,通過這個進行操控單機雙擊。(由於時間問題,只是簡單試用了這個方法(好用),還沒有把圖片查看的源代碼修改,所以就不貼出來了)
---------------------------------
說到這簡單的總結下相關延時操作:
00001.建議使用的方法
- (void)delay1 { // 延遲執行不要用sleep,壞處:卡住當前線程 [NSThread sleepForTimeInterval:3]; NSLog(@"操作"); }00002.方法二
- (void)delay2 { // 一旦定制好延遲任務後,不會卡主當前線程 [self performSelector:@selector(download:) withObject:@"http://美女.jpg" afterDelay:3]; }
- (void)delay3 { // 3秒後回到主線程執行block中的代碼 dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), queue, ^{ NSLog(@"------task------%@", [NSThread currentThread]); }); }
- (void)delay4 { // 3秒後自動開啟新線程 執行block中的代碼 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), queue, ^{ NSLog(@"------task------%@", [NSThread currentThread]); }); }