ios 动画中如何正确响应button的各种事件
来源:互联网 发布:怎么阅读java源码 编辑:程序博客网 时间:2024/05/18 03:05
[UIView animateWithDuration:15.5f delay:0.0f options:UIViewAnimationOptionAllowUserInteraction animations:^{ self.btnTest.frame = CGRectMake(self.btnTest.frame.origin.x, self.view.frame.size.height-37, 75, 37); } completion:^(BOOL finished) { self.btnTest.frame = CGRectMake(225, 36, 75, 37); }];
在这个简单的动画开始后,单击屏幕上的btnTest并不能触发相应事件,因为btnTest的frame在动画结束位置,而并不在动画中的位置。所以只有单击动画结束位置才能响应其事件。如何能做到在动画中单击屏幕上的button能正确响应其事件呢?大致有两种办法。
第一种是使用NSTimer替代上面的动画。在此不多做介绍。
我们要说的是第二种方法,不改变上面的动画代码的情况下也能正确单击并响应事件。
首先我们需要知道的是控件在动画中展示在屏幕中的是layer.presentationLayer,我们也可以称之为展示层,可以根据它得到当前动画中的坐标:layer.presentationLayer.frame。
现在我们虽然可以知道动画中的坐标了,但是如何传递touch事件到控件上呢?难道验证单击point在展示层frame中后直接调用
[self.btnTest sendActionsForControlEvents:<#(UIControlEvents)#>];吗?你可以先尝试这么做,但是随后你会发现许多问题,比如不能良好的控制button的状态,或是如果单击的坐标在button.frame上时,直接就触发了button的事件了。
所以我们现在需要知道如何正确的传递事件到button中。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
查阅资料,我们能知道,只要重写UIView的上面这个方法就可以根据我们的需要传递touch事件到相应控件了。
我们只需要根据上述方法中的point得到对应在屏幕中显示的控件,然后return这个控件就能正确传递了。(根据point得到屏幕中控件还有点小复杂)
现在,我们能把touch事件传递到动画中的button上了。但debug后发现还是有问题,虽然能传递到button上,但是button的状态不对,而且button响应的事件也不对。
我们仔细debug一下button中的
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
方法,发现了吗,在上述方法中touches中的坐标也跟hitTest中的参数point是相同的,所以导致button的状态和响应事件不对。我们只需要重写这几个方法,就能正确显示button的状态和正确触发button事件了。
需要完整代码的朋友可以到点击打开链接下载
1 0
- ios 动画中如何正确响应button的各种事件
- Button响应事件的4中方式
- 按钮Button及各种点击事件的响应
- ios button超出父视图如何响应事件
- button执行frame动画响应点击事件
- listview中button响应事件
- ListView中嵌入布局中有Button,如何响应Button点击事件
- JS中button控件click事件无法响应的问题
- iOS中事件响应的学习记录
- iOS中UIAlertView的点击响应事件
- Android listView 中响应Button点击事件
- Android listView 中响应Button点击事件
- Android listView 中响应Button点击事件
- unity3D,NGUI中button响应事件实现
- Android listView 中响应Button点击事件
- xib中button事件不响应
- activity响应listview中button点击事件
- button移动(或执行动画)之后无法响应点击事件的解决方法
- postfix的一些零零碎碎
- 李航统计学习方法-改进的迭代尺度算法(IIS)总结
- OpenSessionInView总结
- google glog分析2
- 黑马程序员_Java基础[18]_匿名对象、匿名内部类
- ios 动画中如何正确响应button的各种事件
- shell学习简单基础知识
- Android 9Patch右和下的线
- ExtJS核心工具方法
- Qt模块化笔记之multimedia——实时录音放音的另类实现
- 几种常见的鼻炎你了解吗
- SMTP 状态码
- Java事务处理-JDBC事务例子
- 看书小记5(《C专家编程》)