iOS 按钮点动缩放效果获取点击时间间隔(按钮点击一次两个处理事件)

场景

1.png

像上图展示的图片一样,每次用户点击上下左右不同方向的时候,需要向机器人发送指令,其实就是发送一条IM消息。但是要求就是点击下去的时候发送向各个方向行走的指令,当手指脱离的时候发送停止指令,也就是只要手指不松开就不发送停止指令,并且还需要对这个手指点击 离开的时间做判断。一开始闪过的是通过手势,后来仔细想了一下,感觉用手势做的话,添加手势还有手势处理的代码比价多,果断不喜欢。想到用按钮做可能就更好一点,so ,好像看到了一个更好的处理方法。

初步

大多数对于按钮的操作都是如下所示
[_registerBtn addTarget:selfaction:@selector(regiestAction:)forControlEvents:UIControlEventTouchUpInside];

处理最多的是TouchUpInside,然后点进去寻找这个枚举里面更多的内容

2.png

排在第一UIControlEventTouchDown,表示当点击的时候就会触发,再加上UIControlEventTouchUpInside的配合正好可以满足这种需求。一个是当手指刚放上去,另一个则是手指离开按钮,并且能够取到这种时间差

因为需要多个按钮 而且每一个都需要做这种处理,要是每一个都是按钮都按照下面那么直白的写法,肯定不行啊!
//手指刚点击按钮 [self addTarget:self action:@selector(pressedEvent:) forControlEvents:UIControlEventTouchDown]; //手指离开按钮 [self addTarget:self action:@selector(pressedEndEvent:) forControlEvents:UIControlEventTouchUpInside];

过程

若是用继承来写的话,感觉这样的做法太重了,而且对于耦合度而言感觉是得不偿失,另外需要注意的这里面还有个需要对这个点击操作持续时间的处理,即从手指放到按钮上到手指离开按钮这段时间。于是就想到了用类别category,顺带可以把按钮的点击事件用block来处理了。不过这里就需要运用到一点runtime的知识了,需要动态的给UIButton添加属性,不过这里不做重点讲述,可以看demo中的具体代码,以后会写相关内容。

objc_setAssociatedObject(self, &pressedKey, pressblock, OBJC_ASSOCIATION_COPY_NONATOMIC); objc_setAssociatedObject(self, &unpressedKey, unpressedblock,OBJC_ASSOCIATION_COPY_NONATOMIC);

pressedBlock block = (pressedBlock)objc_getAssociatedObject(self, &pressedKey); unpressedBlock block = (unpressedBlock)objc_getAssociatedObject(self, &unpressedKey);

//执行点动效果(放大) [UIView animateWithDuration:selfAnimateTime animations:^{ self.transform = CGAffineTransformMakeScale(1.0, 1.0); } completion:^(BOOL finished) { //此处是当按钮的放大动画做完之后可以进行后续的操作 根据自身业务调节 }];

上面为category中的一部分代码,详细流程与代码请到GitHub
希望小伙伴多一起交流进步😂😂。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容