关于iOS延时操作,阶段性总结(部分关于点击,双击事件冲突)

之前写过一个简单的图片查看器,在图片单击,双击事件处理上遇到问题,通过延时单击事件操作。

方法一:

详细: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];
}

00003.方法三

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

00004.方法四

- (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]);
    });
}
时间: 2024-08-26 10:35:30

关于iOS延时操作,阶段性总结(部分关于点击,双击事件冲突)的相关文章

ios手势操作,四个基本事件与六个常用事件

基本事件包括begin,canceled,move,ended四项,如果对象的hidden属性为yes,则无效果,hidden属性必须为no;才能使用: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{//触碰开始 //    NSLog(@"%ld",[touches count]); if ([[event allTouches]count]==2) { NSArray * one =[[event a

iOS手势操作,拖动,轻击,捏合,旋转,长按,自定义(http://www.cnblogs.com/huangjianwu/p/4675648.html)

1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作. UIPanGestureRecognizer(拖动) UIPinchGestureRecognizer(捏合) UIRotationGestureRecognizer(旋转) UITapGestureRecognizer(点按) UILo

ios多线程操作(七)—— GCD延迟操作与一次性代码

使用GCD函数可以进行延时操作,该函数为 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ }); 现在我们来分解一下参数 dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)) : NSEC_PER_SEC在头文

WebDriver API——延时操作及元素等待

在自动化测试过程当中,受网络.测试设备等诸多因素的影响,我们经常需要在自动化测试脚本中添加一些延时来更好的定位元素来进行一系列的操作. 一般有这么几种方式: 1.implicitlyWait.识别对象时的超时时间.过了这个时间如果对象还没找到的话就会抛出NoSuchElement异常 2.setScriptTimeout.异步脚本的超时时间.webdriver 可以异步执行脚本,这个是设置异步执行脚本脚本返回结果的超时时间. 3.pageLoadTimeout.页面加载时的超时时间.因为webd

GCD 延时操作

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ code to be executed after a specified delay }); 这里也存在一些缺点.不能直接取消我们已经提交到dispatch_after的代码,它将会运行.另外一个需要注意的事情就是,在人们使用dispatch_after去

JQuery延时操作

JQuery通过setTimeout函数可以实现延时操作以完成在编程达到某些需要的效果. 使用方法如下: 1 function doSomething() { 2 alert("hello world"); 3 } 4 var setTime = setTimeout(function () { 5 doSomething() 6 }, 3000); 这样,就可以通过setTimeout方法控制doSomething延时3秒操作:

iOS 数据库操作(使用FMDB)

iOS 数据库操作(使用FMDB) iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.PlausibleDatabase.sqlitepersistentobjects等,FMDB (https://github.com/ccgus/fmdb) 是一款简洁.易用的封装库,这一篇文章简单介绍下FMDB的使用. 在FMDB下载文件后,工程中必须导入如下文件,并使用 libsqlite3.dylib 依赖包.

iOS——文件操作NSFileManager (创建、删除,复制,粘贴)

iOS——文件操作NSFileManager (创建.删除,复制,粘贴) iOS的沙盒机制,应用只能访问自己应用目录下的文件.iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容.iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内.默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.Library包含Caches.Preferences目录.               上面的完整路径为:用户->资源库->Applicat

iOS数据库操作之coredata详细操作步骤

CHENYILONG Blog iOS数据库操作之coredata详细操作步骤 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong iOS应用数据存取的常用方式 ? XML属性列表 -- PList? NSKeyedArchiver 归档 ?Preference(偏好设置) ? SQLite3? Core DataCore Data简介 ? Core Data 是iOS SDK 里的一个很强大的